COMPO TCYGAUGE, 1 GAUGE CONFIGURABLE/PERSONALISABLE ET INTERACTIVE!
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
8 août 2005 à 19:00
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 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.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 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és449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 28 août 2005 à 18:58
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 10 août 2005 à 10:41
Merci Hurrycane,
jette un oeil sur mon pack, il y plein de compos utiles :)
hurrycane
Messages postés117Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 juin 20091 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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+
24 oct. 2005 à 13:27
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 !
19 sept. 2005 à 11:09
18 sept. 2005 à 01:08
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.
12 sept. 2005 à 17:12
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!!!
12 sept. 2005 à 17:05
J' ai cherché PtInRect mais je ne connaissait pas le nom de la fonction.
Normalement il devrait repeindre, je vais jeter un oeil...
29 août 2005 à 16:43
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+
28 août 2005 à 19:58
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.
28 août 2005 à 18:58
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 ?
28 août 2005 à 17:31
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 ?
10 août 2005 à 10:41
jette un oeil sur mon pack, il y plein de compos utiles :)
10 août 2005 à 08:04
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 ...
9 août 2005 à 10:18
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 :)
8 août 2005 à 21:33
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.
8 août 2005 à 19:00
A+