Bonjour,
au début j'étudiais .../Lazarus/Version/examples/canvas_test et comme il y a aucune explication et que l'aide est anorexique, j'ai appliqué ma méthode : je réduis à l'essentiel (juste la fiche frmDraw), et je modifie des valeurs, une à la fois, pour voir où et comment ça agit, et j'en tire les conclusions qui vont bien.
Sauf que là, j'ai bien crû ma dernière heure arrivée, jusqu'à ce que je décide de tout reprendre à zéro pour juste bêtement dessiner un carré avec deux couleurs, et je vous laisse admirer le résultat un superbe trait noir non demandé, entre les deux zones colorées :
Moi, je m'attendais vraiment à ce qu'après avoir posé un grand bout rouge, la pose d'un grand bout jaune par-dessus le rouge le recouvre sans espace, mais non...
L'enregistrement du bmp (bmp.SaveToFile('chemin/fichier');) présentant le même défaut, j'en conclus que la blague doit se cacher dans la fonction Rectangle, sous Linux (1.4 -- oui, je sais) comme sous XP (1.8.2).
Utiliser ça LCLIntf.Rectangle(FHandle, X1, Y1, X2-1, Y2-1); dans canvas.inc ayant généré un trait noir à droite et un autre en bas, je teste avec LCLIntf.Rectangle(FHandle, X1+1, Y1+1, X2, Y2); mais là ça me met un trait noir à gauche et un autre en haut, mais dans les deux cas le trait entre les deux couleurs est présent.
La blague doit donc être bien cachée, quelque part dans le code des widgetsets...
Au fait, vous avez tous remarqué ces -1 dans mes appels à Canvas.Rectangle, c'est pour éliminer les traits noirs à gauche et en haut, qui apparaissent avec le classique Rectangle(0,0,x,y), et le fait de faire LCLIntf.Rectangle(FHandle, X1-1, Y1-1, X2, Y2); permet de revenir à 0,0, mais je vais conserver -1 dans l'IHM, je n'aime pas trifouiller dans les sources, car après, quand on travaille avec des codes venus d'ailleurs, si ça foire on ne sait plus pourquoi.
Dernière minute : j'arrive à m'affranchir de ce trait noir en passant par
Il me reste à étudier et comprendre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Bmp.Canvas.Pen.Color := clRed; // il semblerait que l'utilisation de .Pen à la place de .Brush // impacte le rendu de .Rectangle qui n'a plus besoin des -1 Bmp.Canvas.Rectangle(0, 0, 149, 149); // 149 pour voir l'effet d'un débordement en bas et à droite --> pas d'effet Bmp.Canvas.Brush.Color := clYellow; Bmp.Canvas.FillRect(Rect(13, 0, 149, 149));rajoutés avant les 4 lignes ci-dessus, et dont voici l'action :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Bmp.Canvas.Brush.Color := clBlue; Bmp.Canvas.Pen.Width := 8;
De ces mesures je déduis que Pen.Width dessine une bordure de Width div 2, comportement absolument pas documenté dans l'aide, mais confirmé par le fait que Pen.Height n'existe pas.
Anecdote : en jouant avec la complétion, j'ai découvert TJoinStyle et là, F1 c'est typique de l'aide dans le monde informatique :
C'est tout.Envoyé par F1
Et bien sûr tout le monde sait ce qui se cache sous le mot Miter que je rencontre pour la première fois de ma vie...
Partager