Bouton dont le texte a une fonction de 'progessbar'

Rycku Messages postés 8 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 2 avril 2009 - 26 août 2004 à 16:20
Rycku Messages postés 8 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 2 avril 2009 - 30 août 2004 à 16:05
Bonjour,

Apres d'infructueuse recherche je m'adresse à vous.
Je voudrais faire un bouton dont le texte change de couleur en fonction de l'avancement du traitement que j'ai lancé, comme une progessbar, mon idée etait de mettre le texte en transparent et de mettre une progressbar en dessous, mais je ne sais pas trop comment le faire, j'ai pensé au canvas aussi mais ca n'a pas abouti.
Alors je me suis dis, ce forum est rempli de petit génie :D, peut être eux auront une idée.
Par avance merci et j'espére avoir etait assez clair dans l'explication de mon idée.

Rycku
Pourquoi faire simple quand on peut faire compliqué

2 réponses

cs_saib Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 15 mars 2010
28 août 2004 à 21:28
dans ta boucle de traitement tu met :

Button1.Font.Color := ClBlue; // (par exemple)
Application.ProcessMessages;

Pour faire evoluer la couleur tu peut faire comme ca :

dans les Var de ta procedure tu ajoutes :
FStartRGB : Array[0..2] of Byte; { RGB de la couleur de départ }
FCurrentRGB : Array[0..2] of Byte; { RGB de la couleur courante }
FDeltaRGB : Array[0..2] of Integer; { RGB à ajouter à la couleur de départ pour atteindre la couleur de fin }

Avant ta boucle :

{ Calcul des valeurs RGB pour la couleur courante }
FStartRGB[0] := GetRValue( ColorToRGB( CouleurDebut) );
FStartRGB[1] := GetGValue( ColorToRGB( CouleurDebut) );
FStartRGB[2] := GetBValue( ColorToRGB( CouleurDebut) );

{ Calcul des valeurs à ajouter pour atteindre la couleur de fin }
FDeltaRGB[0] := GetRValue( ColorToRGB( CouleurFin)) - FStartRGB[0];
FDeltaRGB[1] := GetgValue( ColorToRGB( CouleurFin)) - FStartRGB[1];
FDeltaRGB[2] := GetbValue( ColorToRGB( CouleurFin)) - FStartRGB[2];

et dans ta boucle For :

FCurrentRGB[0] := (FStartRGB[0] + MulDiv( i , FDeltaRGB[0] , ValeurDeFinDeBoucle )) mod 256;
FCurrentRGB[1] := (FStartRGB[1] + MulDiv( i , FDeltaRGB[1] , ValeurDeFinDeBoucle )) mod 256;
FCurrentRGB[2] := (FStartRGB[2] + MulDiv( i , FDeltaRGB[2] , ValeurDeFinDeBoucle )) mod 256;

Button1.Font.Color := RGB(FCurrentRGB[0],FCurrentRGB[1],FCurrentRGB[2]);

Exemple Concret :

...
else if FGlyphBar.Style = gsGradient then
begin

FStartRGB[0] := GetRValue( ColorToRGB( FGlyphBar.Color ) );
FStartRGB[1] := GetGValue( ColorToRGB( FGlyphBar.Color ) );
FStartRGB[2] := GetBValue( ColorToRGB( FGlyphBar.Color ) );

FDeltaRGB[0] := GetRValue( ColorToRGB( FColorNormal )) - FStartRGB[0];
FDeltaRGB[1] := GetgValue( ColorToRGB( FColorNormal )) - FStartRGB[1];
FDeltaRGB[2] := GetbValue( ColorToRGB( FColorNormal )) - FStartRGB[2];

for i := 0 to 25 do
begin
FCurrentRGB[0] := (FStartRGB[0] + MulDiv( i , FDeltaRGB[0] , 25 )) mod 256;
FCurrentRGB[1] := (FStartRGB[1] + MulDiv( i , FDeltaRGB[1] , 25 )) mod 256;
FCurrentRGB[2] := (FStartRGB[2] + MulDiv( i , FDeltaRGB[2] , 25 )) mod 256;

SingleMenuArray[index].ASource.Canvas.Pen.Color := RGB(FCurrentRGB[0],FCurrentRGB[1],FCurrentRGB[2]);

SingleMenuArray[index].ASource.Canvas.Polyline([Point(ARect.Left + i,SingleMenuArray[index].ASource.Canvas.ClipRect.Top), Point(ARect.Left + i,SingleMenuArray[index].ASource.Canvas.ClipRect.Bottom)]);

end;
end;

(Extrait d'un composant queje suis en train de faire)

Voila, j'espere avoir pu t'aider ;)

saib
0
Rycku Messages postés 8 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 2 avril 2009
30 août 2004 à 16:05
Merci Beaucoup.

Pour ma part j'ai trouvé un autre moyen, je suis passé par un CANVAS que j'associe au bouton, je fait un TextOut pour ecrire mon texte dans le bouton et ensuite je fait une lecture pixel par pixel quand je rencontre tel pixel de couleur je le remplace par une autre couleur, il suffit ensuite de le temporiser.

Mais j'aime bien ta solution aussi :D

Rycku
Ce qui ne tue pas rend plus fort - Nietzsche
0
Rejoignez-nous