Bonjour,

Yes, c'est encore moi avec mes misères, et celle-ci est gratinée !

Qu'on en juge : je voulais débugguer une fonction qui me retourne une couleur en fonction de 3 paramètres qui lui sont passés, car elle ne réagit pas correctement : si je lui passe (0, 512, compteur_de_boucle) elle fonctionne et j'ai un joli dégradé, si je lui passe (jpColorToInteger(clBlue), jpColorToInteger(clYellow), compteur_de_boucle) j'ai une couleur unie .
J'ai donc voulu voir ce qui se cachait derrière ces noms, et pour ce faire j'ai rajouté dans ma maquette une ligne de log, avant d'appeler la fonction suspecte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
memo1.Lines.Add(IntToStr(jpColorToInteger(clBlue))+'  '+IntToStr(jpColorToInteger(clYellow)));
Cette fonction jpColorToInteger est tout simplement un clone de la fonction ColorToRGB récupérée dans Graphics et renommée par votre serviteur pour avoir un nom plus en rapport avec ce qu'elle fait, et j'en ai profité pour la déclarer inline;, le tout dans un module complémentaire.

Les informations de log ayant l'air normales (16711680 65535), j'ai alors rajouté sous la première ligne de log une autre ligne pour en avoir le cœur net :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
memo1.Lines.Add(IntToStr(clBlue)+'  '+IntToStr(clYellow));

Et c'est là qu'on rigole : si le mémo affiche maintenant deux lignes identiques avec les mêmes valeurs, la couleur unie retournée n'est plus la même !

Je n'en croyais pas mes yeux, j'ai fait 10 fois le test de commenter/décommenter cette seconde ligne de log et je confirme que ça réagit comme décrit.

Alors pour en avoir le cœur net, j'ai basculé le projet dans la machine XP / Laz 1.6rc1 / FPC 3.0 et le canard est toujours vivant, plus le fait que selon l'O.S. les couleurs ne sont pas les mêmes...

On a donc Linux (Laz 1.4 / FPC 2.6.2) à gauche et XP à droite, en haut lorsque les deux lignes de log se suivent et en bas lorsque la seconde est commentée :
Nom : bug_couleurs.jpg
Affichages : 355
Taille : 8,6 Ko

Et pour obtenir cette magnifique image, il me suffit donc de commenter ou pas la seconde ligne (ou la première, ça foire tout autant) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
memo1.Lines.Add(IntToStr(jpColorToInteger(clBlue))+'  '+IntToStr(jpColorToInteger(clYellow)));
memo1.Lines.Add(IntToStr(clBlue)+'  '+IntToStr(clYellow));
// les valeurs logguées sont toujours les mêmes : 16711680  65535
  for h := 0 to DisplayLenght-1 do
  begin
    aColor := GiveRainbowColor(jpColorToInteger(clBlue),jpColorToInteger(clYellow), h);
La grande question est donc : comment est-il possible que le rendu de couleurs soit différent alors que les valeurs passées à la fonction sont identiques ?

Et le plus dément, c'est lorsque je loggue ou pas mais que je passe toujours les mêmes constantes aColor := GiveRainbowColor(16711680, 65535, h); à la fonction : les résultats affichés continuent à être différents !
Sous Linux de gauche à droite, pas de log, une ligne de log, deux lignes de log :
Nom : bug_valeurs.jpg
Affichages : 256
Taille : 6,4 Ko

Je suis incapable de débugguer ça puisque d'habitude j'utilise des mémos pour voir où ça coince, mais là,
Ah, la fonction en question vient de là sans avoir rien changé.