Letzte Korrekturen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Grafische Komponenten erzeugen - Index

Die Standardkomponente TShape hat der Beispielkomponente nur noch eines voraus: Sie kann neben Rechtecken und Ellipsen auch Quadrate und Kreise zeichnen. Um dies zu realisieren, benötigen Sie einen Code, der die kürzesten Seitenlinien ermittelt und das Bild zentriert.

Hier eine verbesserte Version der Methode Paint, die auch Quadrate und Kreise zeichnet:



 procedure TSampleShape.Paint;
 var
   X, Y, W, H, S: Integer;
 begin  with Canvas do
   begin
     Pen := FPen;                                              { Stift der Komponente kopieren }
     Brush := FBrush;                                        { Pinsel der Komponente kopieren }
     W := Width;                                                { Breite der Komponente verwenden }
     H := Height;                                              { Höhe der Komponente verwenden }
     if W < H then S := W else S := H;                { Kleinste Werte speichern }
     case FShape of                                   { Höhe, Breite und Position anpassen }
       sstRectangle, sstRoundRect, sstEllipse:
         begin
           X := 0;                                  { Ursprung für diese Figuren oben links }
           Y := 0;
         end;
       sstSquare, sstRoundSquare, sstCircle:
         begin
           X := (W - S) div 2;                             { Diese Figuren horizontal ... }
           Y := (H - S) div 2;                                        { ... und vertikal zentrieren }
           W := S;                                  { Kleinste Werte für Breite ... }
           H := S;                                                    { ... und Höhe verwenden }
         end;
     end;
     case FShape of
       sstRectangle, sstSquare:
         Rectangle(X, Y, X + W, Y + H);                     { Rechtecke und Quadrate zeichnen }
       sstRoundRect, sstRoundSquare:
         RoundRect(X, Y, X + W, Y + H, S div 4, S div 4);           { Figuren mit abgerundeten Ecken }
       sstCircle, sstEllipse:
         Ellipse(X, Y, X + W, Y + H);                                 { Runde Figuren }
     end;
   end;
 end;



 void __fastcall TSampleShape::Paint(void)
 {
   int X,Y,W,H,S;
   Canvas->Pen = FPen;                                // Stift der Komponente kopieren
   Canvas->Brush = FBrush;                            // Pinsel der Komponente kopieren
   W=Width;                                           // Breite der Komponente verwenden
   H=Height;                                          // Höhe der Komponente verwenden
   X=Y=0;                                             // Kleinsten Wert für Kreise/Quadrate speichernsquares
   if( W<H )
     S=W;
   else
     S=H;
   switch(FShape)                              // Höhe, Breite und Position anpassen
   {
     case sstRectangle:
     case sstRoundRect:
     case sstEllipse:
       Y=X=0;                                // Für diese Formen liegt der Ursprung oben links
       break;
     case sstSquare:
     case sstRoundSquare:
     case sstCircle:
       X= (W-S)/2;                            // Horizontal zentrieren
       Y= (H-S)/2;                            // und vertikal zentrieren
       break;
     default:
     break;
   }
   switch(FShape)
   {
     case sstSquare:                          // Rechtecke und Quadrate zeichnen
       W=H=S;                                 // Kleinstes Maß für Breite und Höhe verwenden
     case sstRectangle:
       Canvas->Rectangle(X,Y,X+W,Y+H);
       break;
     case sstRoundSquare:                     // Abgerundete Rechtecke und Quadrate zeichnen
       W=H=S;
     case sstRoundRect:
       Canvas->RoundRect(X,Y,X+W,Y+H,S/4,S/4);
       break;
     case sstCircle:                          // Kreise und Ellipsen zeichnen
       W=H=S;
     case sstEllipse:
       Canvas->Ellipse(X,Y,X+W,Y+H);
       break;
     default:
       break;
   }
 }