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.