Adaptation du dessin de la forme

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création d'un composant graphique - Index

Le contrôle forme standard effectue une tâche supplémentaire que ne fait pas encore le contrôle forme de notre exemple : il gère les carrés et les cercles ainsi que les rectangles et les ellipses. Pour ce faire, vous devez écrire le code qui trouve le côté le plus petit et centre l'image.

Voici une méthode Paint parfaitement adaptée aux carrés et aux ellipses :



 procedure TSampleShape.Paint;
 var
   X, Y, W, H, S: Integer;
 begin  with Canvas do
   begin
     Pen := FPen;                                              { copier le crayon du composant }
     Brush := FBrush;                                        { copier le pinceau du composant }
     W := Width;                                                { utiliser la largeur du composant }
     H := Height;                                              { utiliser la hauteur du composant }
     if W < H then S := W else S := H;                { enregistrer du plus petit pour les cercles/carrés }
     case FShape of                                   { ajuster la hauteur, la largeur et la position }
       sstRectangle, sstRoundRect, sstEllipse:
         begin
           X := 0;                                  { l'origine est l'angle supérieur gauche de ces formes }
           Y := 0;
         end;
       sstSquare, sstRoundSquare, sstCircle:
         begin
           X := (W - S) div 2;                             { centrer horizontalement... }
           Y := (H - S) div 2;                                        { ...puis verticalement }
           W := S;                                  { utiliser la dimension la plus petite pour la largeur... }
           H := S;                                                    { ...et pour la hauteur }
         end;
     end;
     case FShape of
       sstRectangle, sstSquare:
         Rectangle(X, Y, X + W, Y + H);                     { dessiner les rectangles et les carrés }
       sstRoundRect, sstRoundSquare:
         RoundRect(X, Y, X + W, Y + H, S div 4, S div 4);           { dessiner des formes arrondies }
       sstCircle, sstEllipse:
         Ellipse(X, Y, X + W, Y + H);                                 { dessiner les formes arrondies }
     end;
   end;
 end;



 void __fastcall TSampleShape::Paint(void)
 {
   int X,Y,W,H,S;
   Canvas->Pen = FPen;                        // copie le crayon du composant
   Canvas->Brush = FBrush;                    // copie le pinceau du composant
   W=Width;                                   // utilise la largeur du composant
   H=Height;                                  // utilise la hauteur du composant
   X=Y=0;                                     // sauvegarde du plus petit pour les cercles/carrés
   if( W<H )
     S=W;
   else
     S=H;
   switch(FShape)                              // ajuste la hauteur, la largeur et la position
   {
     case sstRectangle:
     case sstRoundRect:
     case sstEllipse:
       Y=X=0;                                // l'origine est l'angle supérieur gauche de ces formes
       break;
     case sstSquare:
     case sstRoundSquare:
     case sstCircle:
       X= (W-S)/2;                            // centre horizontalement
       Y= (H-S)/2;                            // puis verticalement
       break;
     default:
     break;
   }
   switch(FShape)
   {
     case sstSquare:                          // dessine les rectangles et les carrés
       W=H=S;                                 // utilise la dimension la plus petite pour la largeur et la hauteur
     case sstRectangle:
       Canvas->Rectangle(X,Y,X+W,Y+H);
       break;
     case sstRoundSquare:                     // dessine les rectangles et les carrés arrondis
       W=H=S;
     case sstRoundRect:
       Canvas->RoundRect(X,Y,X+W,Y+H,S/4,S/4);
       break;
     case sstCircle:                          // dessine les cercles et les ellipses
       W=H=S;
     case sstEllipse:
       Canvas->Ellipse(X,Y,X+W,Y+H);
       break;
     default:
       break;
   }
 }