Dessin de l'image du composant
Remonter à Création d'un composant graphique - Index
L'essentiel d'un contrôle graphique se résume à sa façon de dessiner son image à l'écran. Le type abstrait TGraphicControl définit une méthode appelée Paint que vous devez redéfinir pour peindre l'image voulue dans votre contrôle.
La méthode Paint de votre contrôle forme doit accomplir plusieurs tâches :
- Utiliser le crayon et le pinceau sélectionnés par l'utilisateur.
- Utiliser la forme sélectionnée.
- Ajuster les coordonnées pour que les carrés et les cercles utilisent une largeur et une hauteur identiques.
La redéfinition de la méthode Paint nécessite deux étapes :
- Ajout de Paint dans la déclaration du composant.
- Insertion de la méthode Paint dans la partie implementation de l'unité.
S'agissant de notre contrôle forme, vous devez ajouter la déclaration suivante à la déclaration de classe :
type TSampleShape = class(TGraphicControl) . . . protected procedure Paint; override; . . . end;
class PACKAGE TSampleShape : public TGraphicControl { . . . protected: virtual void __fastcall Paint(); . . . };
Vous devez ensuite écrire la méthode dans la partie implementation de l'unité :
procedure TSampleShape.Paint; begin with Canvas do begin Pen := FPen; { copy the component's pen } Brush := FBrush; { copy the component's brush } case FShape of sstRectangle, sstSquare: Rectangle(0, 0, Width, Height); { draw rectangles and squares } sstRoundRect, sstRoundSquare: RoundRect(0, 0, Width, Height, Width div 4, Height div 4); { draw rounded shapes } sstCircle, sstEllipse: Ellipse(0, 0, Width, Height); { draw round shapes } end; end; end;
void __fastcall TSampleShape::Paint() { int X,Y,W,H,S; Canvas->Pen = FPen; // copy the component's pen Canvas->Brush = FBrush; // copy the component's brush W=Width; // use the component width H=Height; // use the component height X=Y=0; // save smallest for circles/squares if( W<H ) S=W; else S=H; switch(FShape) { case sstRectangle: // draw rectangles and squares case sstSquare: Canvas->Rectangle(X,Y,X+W,Y+H); break; case sstRoundRect: // draw rounded rectangles and squares case sstRoundSquare: Canvas->RoundRect(X,Y,X+W,Y+H,S/4,S/4); break; case sstCircle: // draw circles and ellipses case sstEllipse: Canvas->Ellipse(X,Y,X+W,Y+H); break; default: break; } }
Paint est appelée à chaque fois que le contrôle doit mettre à jour son image. Les contrôles sont dessinés lorsqu'ils s'affichent pour la première fois ou lorsqu'une fenêtre qui se trouvait au-dessus disparaît. En outre, vous pouvez forcer le dessin en appelant Invalidate, comme le fait la méthode StyleChanged.