Dessin de l'image du composant

De RAD Studio
Aller à : navigation, rechercher

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 :

  1. Ajout de Paint dans la déclaration du composant.
  2. 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.