Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Radien beim Zeichnen einer Form (https://www.delphipraxis.net/20771-radien-beim-zeichnen-einer-form.html)

Helmi 22. Apr 2004 20:10


Radien beim Zeichnen einer Form
 
Hallo Jungs,

ich habe folgende Frage:

ich erzeuge in einer Komponente eine Form, die einer Sprechblase ähnlich schaut.

Das Aussehen der Form ändere ich über Paint - mit Canvas.Polyline() werden die
Umrisse mit TPoints angegeben.

Leider wird dadurch die Form mit ziemlichen Ecken und Kanten angezeigt - ich
würde aber gerne die Form etwas runder anzeigen lassen.

Weiss jemand wie ich das machen könnte?

Anbei mal ein Auszug aus meinem Quellcode - ist wahrscheinlich besser als das
unverständliche Wirrwarr das oben steht :-)

Code:

var
  Points: array [0..11] of TPoint;
  h, w, Max_Left, aktuell_Left, X_Pos_Icon, Diff_Left: Integer;

begin
  with FBalloonTip do
    begin
      //
      Max_Left := Screen.DesktopWidth - Width - 20;

      // X-Position des Icons
      X_Pos_Icon := FindTrayIcon(tnid).X + 8;

      // berechnete X-Position des Pfeils
      aktuell_Left := X_Pos_Icon - (3 * C);

      //
      Diff_Left := Max_Left - aktuell_Left;


      h := Height;
      w := Width;
      Points[0].X := C;                  Points[0].Y := 0;
      Points[1].X := 0;                  Points[1].Y := C;
      Points[2].X := 0;                  Points[2].Y := h - (2 * C);
      Points[3].X := C;                  Points[3].Y := h - C;

      //
      If Diff_Left > 0 then
        begin
          Left := aktuell_Left;

          Points[4].X := (2 * C);            Points[4].Y := h - C;
          Points[5].X := (3 * C);            Points[5].Y := h;    //Pfeil rechts
          Points[6].X := (3 * C);            Points[6].Y := h - C;
        end
      else
        begin
          Left := Max_Left;
          Points[4].X := X_Pos_Icon - Left - C;     Points[4].Y := h - C;
          Points[5].X := X_Pos_Icon - Left;         Points[5].Y := h;
          Points[6].X := X_Pos_Icon - Left;         Points[6].Y := h - C;
        end;

      Points[7].X := w - C;              Points[7].Y := h - C;
      Points[8].X := w;                  Points[8].Y := h - (2 * C);
      Points[9].X := w;                  Points[9].Y := C;
      Points[10].X := w - C;             Points[10].Y := 0;
      Points[11].X := C;                 Points[11].Y := 0;

//      Points[5].X := (2 * C) + (C div 2); Points[5].Y := h; //Pfeil mittig
//      Points[5].X := (2 * C);            Points[5].Y := h; //Pfeil links

      // Form aufbauen
      SetWindowRgn(Handle, CreatePolygonRgn(Points, 11, WINDING), True);

      // Rahmen um die Form aufbauen
      Canvas.Pen.Width := 2;
      Canvas.Pen.Style := psInsideFrame;
      Canvas.Polyline(Points);
    end;
end;
mfg
Helmi

Markus K. 22. Apr 2004 20:55

Re: Radien beim Zeichnen einer Form
 
Hallo Helmi,
wenn ich runde oder ovale Formulare erstellen möchte mache ich es so (du musst nur noch die Werte deinen Vorstellungen anpassen). Vielleicht hilft es dir ein wenig. Den Code kannst du zum Beispiel einfach ins FormCreate "reinsetzen".
Delphi-Quellcode:
var Oval: HRgn;
begin
     Oval:=CreateEllipticRgn(50,50,200,200);
     SetWindowRgn(Handle,Oval,True);
end;
Tschüß Markus

Helmi 22. Apr 2004 21:00

Re: Radien beim Zeichnen einer Form
 
Hallo Markus,

diesen Code kenn ich.

Mein Problem ist, dass er mir nichts nützt.

Dieser Code erzeugt ja was rundes - ich will aber im Groben und Ganzen ein Rechteck mit abgerundeten Ecken.

himitsu 22. Apr 2004 21:02

Re: Radien beim Zeichnen einer Form
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ist auch nicht so hübsch, ab da ist genug drin, was dir hilft.

Markus K. 22. Apr 2004 21:02

Re: Radien beim Zeichnen einer Form
 
Achso Sorry...habe nicht an rechteckige Blasen gedacht :oops:

Tschüß Markus

Jörn 23. Apr 2004 12:08

Re: Radien beim Zeichnen einer Form
 
http://astronomy.swin.edu.au/~pbourk...es/supershape/

Das könnte dir helfen einen entsprechenden Algorithmus zu entwickeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz