Degrader la couleur D'un panel

Résolu
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009 - 14 sept. 2004 à 22:37
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 - 20 sept. 2004 à 23:11
Je voudrais Changer la couleur D'un panel d'une couleur X vers une couleur Y Mais en la degradant et en n'affichant qu'une couleur a la fois.

Merci

8 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
20 sept. 2004 à 23:11
salut koaiz,

il est vrai que le degradé de couleur ne se fait pas correctement.
Réutilise cette nouvelle function, elle est presque identique à la précédente sauf la déclaration des variables. Elles passent de byte à integer.

function Degrader(StartColor, EndColor : TColor; indexColor : integer): TColor;
var
  StartRGB   : array[0..2] of integer;    {couleur de début RGB}
  EndRGB     : array[0..2] of integer;    {couleur de fin RGB}
  CurrentRGB : array[0..2] of integer;    {couleur de retour RGB}
begin
 { Calcul des valeurs RGB pour la couleur courante }
  StartRGB[0] := GetRValue(ColorToRGB(StartColor));
  StartRGB[1] := GetGValue(ColorToRGB(StartColor));
  StartRGB[2] := GetBValue(ColorToRGB(StartColor));

  { Calcul des valeurs à ajouter pour atteindre la couleur de fin }
  EndRGB[0] := GetRValue(ColorToRGB(EndColor)) - StartRGB[0];
  EndRGB[1] := GetGValue(ColorToRGB(EndColor)) - StartRGB[1];
  EndRGB[2] := GetBValue(ColorToRGB(EndColor)) - StartRGB[2];

 { Calcul de la couleur courante suivant un index allant de 0 à 255 }
  CurrentRGB[0] := StartRGB[0] + MulDiv(indexColor,EndRGB[0],255) mod 256;
  CurrentRGB[1] := StartRGB[1] + MulDiv(indexColor,EndRGB[1],255) mod 256;
  CurrentRGB[2] := StartRGB[2] + MulDiv(indexColor,EndRGB[2],255) mod 256;

  { Retourne la couleur }
  Result := TColor(RGB(CurrentRGB[0],CurrentRGB[1],CurrentRGB[2]));
end;


Bonne Prog,

Olivier.
3
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009
15 sept. 2004 à 14:20
j'ai essayer mais pas de resultat la boucle fonctionne mais la couleur ne change pas si tu peut me donner un exemple source ca serai mieux

CHUKRAN D'avence
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
15 sept. 2004 à 18:42
Salut koaiz,

que cherche tu réelement à faire ?
Désires tu avoir un panel avec une couleur qui se dégrade vars une autre ?
Ou bien un Panel, qui passe d'une couleur Bleu, puis Vert, Puis Jaune, .... ?

Bonne Prog,

Olivier.
0
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009
15 sept. 2004 à 20:20
Salut Olivier

mon probleme et de canger la couleur d'un panel en passant d'une couleur A puis ses nuance jusqu'a une couleur B une a la fois chaque fois le panel prent une couleur jusqu'a arriver a la couleur B

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
15 sept. 2004 à 21:15
voici une function qui te permettra de faire ce que tu souhaites

function Degrader(StartColor, EndColor : TColor; indexColor : byte): TColor;
var
  StartRGB   : array[0..2] of byte;    {couleur de début RGB}
  EndRGB     : array[0..2] of byte;    {couleur de fin RGB}
  CurrentRGB : array[0..2] of byte;    {couleur de retour RGB}
begin
  { Calcul des valeurs RGB pour la couleur courante }
  StartRGB[0] := GetRValue(ColorToRGB(StartColor));
  StartRGB[1] := GetGValue(ColorToRGB(StartColor));
  StartRGB[2] := GetBValue(ColorToRGB(StartColor));

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

 { Calcul de la couleur courante suivant un index allant de 0 à 255 }
  CurrentRGB[0] := (StartRGB[0] + MulDiv(indexColor,EndRGB[0],255)) mod 256;
  CurrentRGB[1] := (StartRGB[1] + MulDiv(indexColor,EndRGB[1],255)) mod 256;
  CurrentRGB[2] := (StartRGB[2] + MulDiv(indexColor,EndRGB[2],255)) mod 256;

  { Retourne la couleur }
  Result := RGB(CurrentRGB[0],CurrentRGB[1],CurrentRGB[2]);
end;


Il te suffit de donner ta couleur de départ A et ta couleur d'arriver B ainsi qu'un index allant de 0 à 255 te permettant d'avoir la plage de couleur entre A et B. Il te reste à boucler entre 0 et 255 pour l'index, afin de faire varier la couleur de ton TPanel.

La function te renvoie une couleur, il te suffira de l'affecté à la propriété Color de ton TPanel. ( Panel.Color )

Bonne Prog,

Olivier. ;)
0
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009
15 sept. 2004 à 23:31
Salut Olivier

J'ai utilier ta fonction en metant l'index en boucle mais ca na pas donner de resulta car je recoit directement la couleur de la fin !!!!!!!!!! je n'ai pas compris ou se situe le probleme peut tu m'expliquer ou si possible me donner un exemple avec source.

Merci.
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
16 sept. 2004 à 00:00
voici deux techniques plus ou moins efficaces suivant tes besoins !

Dans une boucle avec un sleep de 10 ms.
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to 255 do
  begin
    Panel1.Color := Degrader(clNavy, clBlue, i);
    sleep(10);
    Application.ProcessMessages;
  end;
end;


Dans un Timer avec la tempo. Il faut declarer ton Index dans en variable globale.
procedure TForm1.TimerTimer(Sender: TObject);
begin
  inc(Index);

  if Index > 255 then
    Index := 0;

  Panel1.Color := Degrader(clNavy, clBlue, Index);
end;


Bonne Prog,

Olivier.
0
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009
16 sept. 2004 à 15:33
Salut

J'ai essaye ca marche mais je n'ai pas les bonne nuance de couleur par exemple si la couleur de debut est Jaune et celle de la fin est verte, on vois que la couleur du panel saute du jaune au rouge
puis le vert se degrade, alors que se que je desir faire c'est du jaune puis les nuance de jaune en allon vers un vert claire (vert-Jaune) puis en allons vers un vert plus fonce.
car je suis entaine de travailler sur une application de simulation de T.P de chimie (neutralisation acido-basique) et les couleur c'est tres important.

Merci
0