COMPO TCYGAUGE, 1 GAUGE CONFIGURABLE/PERSONALISABLE ET INTERACTIVE!

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 8 août 2005 à 19:00
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 24 oct. 2005 à 13:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33125-compo-tcygauge-1-gauge-configurable-personalisable-et-interactive

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
24 oct. 2005 à 13:27
Je viens de modifier la TcyGauge pour que je puisse faire une TcyDBGauge !!!
Je ne sais pas encore si je vais "distribuer" la TcyDBGauge (gauge liée à un champ de table) ...

La TcyGauge a quand même gagné en option:
-> Propriété ReadOnly: permet de modifier la position ou non de la gauge (sans code cette fois)
-> Événement OnChange
-> Quelques Optimisations

EnJoY !
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
19 sept. 2005 à 11:09
J' ai bien noté l' utilisation de PtInRect mais je t' avoue que je suis débordé. J' attendais donc avant de te répondre. J' ai jeté un oeil sur ton lecteur mp3 et je t' y ai laissé un petit mot. A+
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
18 sept. 2005 à 01:08
Okay, ca roole. En fait j'utilise la meme gauge pour représenter l'avancement de la lecture d'un mp3 (clickable et tout) et quand on hange le volume, la gauge passe au rouge pendant .2 secondes(suffisant je pense) pour indiquer le volume du player, puis reprend son role.

A propos du PtInRect., finalement j'ai pas inclu l'instruction ScreenToClient, je le gère extérieurement.

Encore une fois, un compo tres sympa.
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 sept. 2005 à 17:12
Si tu voulais faire un systeme de clignotement, alors oui, il faut faire Application.ProcessMessages avant de rechanger les couleurs comme dans ton exemple:
cyGauge.ItemActive:=clRed;
cyGauge.ItemLastActive:=clRed;
Application.ProcessMessages;
Sleep(200);
cyGauge.ItemActive:=clLime;
cyGauge.ItemLastActive:=clLime;

Cela est dû à l' utilisation de la méthode Invalidate comme par exemple ici:
procedure TcyGauge.SetItemInactive(const Value: TColor);
begin
if Value <> FItemInactive
then begin
FItemInactive := Value;
Invalidate;
end;
end;

Même si on execute 56 fois le Invalidate, ça ne provoquera qu' une seule fois la méthode paint à moins que, évidemment, on ne force l' execution avec processMessage. C' est donc dans un soucis d' optimisation!!!
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 sept. 2005 à 17:05
Merci DeltaFX pour ces remarques.
J' ai cherché PtInRect mais je ne connaissait pas le nom de la fonction.
Normalement il devrait repeindre, je vais jeter un oeil...
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
29 août 2005 à 16:43
Désolé tout le monde mais je suis en vacance et je très peu de temps !!!!
Donc, je vous informe que je répondrai à toutes vos questions à partir du 12 spetembre.
Ne m' en voulez pas mais les vacances c' est sacré !!!!
A+
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
28 août 2005 à 19:58
Update de ma premiere intervention :
J'ai changé dans la function GetValue le test.

if (fromPoint.X >= ItemsRect.Left)
and (fromPoint.X <= ItemsRect.Right)
and (fromPoint.Y >= ItemsRect.Top)
and (fromPoint.Y <= ItemsRect.Bottom)

devient :

if PtInRect(ItemsRect, ScreenToClient(fromPoint))

pour pouvoir appeler GetValue à partir du tpoint résultat d'un GetCursorPos, et simplifier le test. (sinon, il faut disposer des x et y comme dans mousedown, par ex)

DOnc un click dans la gauge je l'écris :

procedure TForm1.cyGaugeClick(Sender: TObject);
var NewPos: int64;
ClickImpact : TPoint;
begin
GetCursorPos(ClickImpact);
if Playing then
begin
if cyGauge.GetValue(ClickImpact,NewPos) then
begin
MediaPlayerMP3.Position:= MediaPlayerMP3.length*
(NewPos) div 100;
MediaPlayerMP3.play;
end;
end;

end;


Je suis sous delphi 7.
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
28 août 2005 à 18:58
Bug detected ?

Si je fais ca

cyGauge.ItemActive:=clRed;
cyGauge.ItemLastActive:=clRed;
Sleep(2000);
cyGauge.ItemActive:=clLime;
cyGauge.ItemLastActive:=clLime;

Les couleurs ne changent pas.

Là, ca marche.

cyGauge.ItemActive:=clRed;
cyGauge.ItemLastActive:=clRed;
Application.ProcessMessages;
Sleep(200);
cyGauge.ItemActive:=clLime;
cyGauge.ItemLastActive:=clLime;

il ne repeint pas automatiquement ou bien ?
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
28 août 2005 à 17:31
Waahh, dire que je me préparais a utiliser une gauge de chez tms instru-workshop en version euh, ahem, -crackware- alors que celle-ci fait tout pareil.... trop contant.

J'aimerais m'en servir comme d'une scrollbar (cursor en forme de petite croix pour positionnement précis) mais dans l'evenement onclick, tu es sur que la position de souris dans le compo au moment du click modifie la valeur de position ? J'ai installé cygauge de ton pack de compo, il est à jour ?
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
10 août 2005 à 10:41
Merci Hurrycane,
jette un oeil sur mon pack, il y plein de compos utiles :)
hurrycane Messages postés 117 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 19 juin 2009 1
10 août 2005 à 08:04
salut mauricio
ca fait plaisir de savoir que tu t'est mis a la realisation de composants
comme ca plus tu en saura plus on aura besoin de toi ... lol
bon courage ...
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
9 août 2005 à 10:18
Merci DelphiProg,
mais je vais laisser Delphi où il est pour pouvoir me reposer un peu et faire ce que j' adore plus que tout: dormir ... D' ailleurs, ce compo était pour la rentrée seulement. Je vais devoir trouver autre chose maintenant, c' est malin! En tout cas, merci pour la note, venant de toi c' est encore mieux! À ce propos, je voudrais te rendre hommage pour le temps que tu as 'perdu' à me montrer ce qu' est la création de compo. Merci pour ton dévouement.
A+ Mauricio::en vacance dans 4 jours :)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
8 août 2005 à 21:33
Salut mauricio,

Décidément, il n'est pas facile d'arrêter un train en marche :o)

Pas mal ce compo signé "Made in Mauricio". Tu vas t'ennuyer pendant tes vacances. A moins que tu emmènes Delphi sous le bras, lol.
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
8 août 2005 à 19:00
Je suis en train de renommer les propriétés pour que ce soit plus facile. Je posterai demain.
A+
Rejoignez-nous