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/)
-   -   CreatePolygonRgn und abgerundete Ecken (https://www.delphipraxis.net/207924-createpolygonrgn-und-abgerundete-ecken.html)

runningsoft 17. Mai 2021 16:35

CreatePolygonRgn und abgerundete Ecken
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,

ich bin gerade dabei, eine Komponente zu erstellen (abgeleitet von TPanel) mit der in Anhang 1 dargestellten Form. Das funktioniert über CreatePolygonRgn soweit ganz gut.

Schön wäre es, wenn ich das ganze jetzt noch mit abgerundeten Ecken, so wie in Anhang 2 zu sehen, hinbekommen würde. Über CreateRoundRectRgn kann man sich ja recht einfach ein rechteckiges Panel mit abgerundeten Ecken erstellen. Gibt es eine Möglichkeit, auch ein Polygon mit abgerundeten Ecken zu erstellen? Hab bisher nichts gefunden.

Vielen Dank schon mal für eure Hinweise und Ideen.

Uwe Raabe 17. Mai 2021 16:45

AW: CreatePolygonRgn und abgerundete Ecken
 
Du könntest erst einen Path zusammenbauen und den dann in eine Region umwandeln.

himitsu 17. Mai 2021 17:13

AW: CreatePolygonRgn und abgerundete Ecken
 
Oder die runde Region erstellen (CreateRoundRectRgn)
und dann noch die Region für den Pfeil addieren.

runningsoft 17. Mai 2021 20:10

AW: CreatePolygonRgn und abgerundete Ecken
 
Vielen Dank für die Hinweise. Ich habs dann wie von Himitsu vorgeschlagen gemacht.

Delphi-Quellcode:
CombineRgn
hieß das Zauberwort, um zwei Regions miteinander zu verbinden. Rgn1 wird dadurch um Rgn2 erweitert und ergibt die gewünschte Form.

Falls mal jemand das gleiche Problem hat, hier mein Code:
Delphi-Quellcode:
procedure TTipPanel.RecreateHRGN;
const radius = 20;
var
  Rgn1, Rgn2: hRgn;
  pList : array of TPoint;
begin
  //zuerst die Grundform mit gerundeten Ecken
  Rgn1 := CreateRoundRectRgn(0,30,200,100,radius,radius);

  //danach den Pfeil auf die obere Kante
  SetLength(pList,3);
  pList[0] := Point(30,30);
  pList[1] := Point(30,0);
  pList[2] := Point(60,30);
  Rgn2 := CreatePolygonRgn(plist[0],High(pList)+1,Winding);

  CombineRgn(Rgn1,Rgn1,Rgn2,RGN_OR);
  SetWindowRgn(Handle, Rgn1, True);
end;
Vielen Dank für die Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 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