![]() |
Eine Region erzeugen mit BeginPath ... EndPath
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
in Zusammenhang mit einem anderen Beitrag, geht es um das erstellen einer Region. Wie kann ich bitte zwei Bögen und zwei Linien zu einer Region zusammenfassen um danach die Region mit einer Farbe zu füllen. Es müßte in etwa so gehen, das funkt jedoch nicht.
Delphi-Quellcode:
BeginPath(Canvas.Handle);
Arc(Canvas.Handle, p1.x, p1.y, p2.x, p2.y, e1.x, e1.y, s1.x, s1.y); //Bogen außen Arc(Canvas.Handle, p3.x, p3.y, p4.x, p4.y, e2.x, e2.y, s2.x, s2.y); //Bogen innen canvas.MoveTo(s1.x,s1.y); canvas.LineTo(s2.x,s2.y); //Verbindungslinie 1 zwischen den Bögen canvas.MoveTo(e1.x,e1.y); canvas.LineTo(e2.x,e2.y);//Verbindungslinie 2 zwischen den Bögen EndPath(Canvas.Handle); FillPath(Canvas.Handle); Region := PathToRegion(Canvas.Handle); if (Region<>0) then begin ShowMessage('gültige Region'); DeleteObject(Region); end;{if} Gruß Kostas |
Re: Eine Region erzeugen mit BeginPath ... EndPath
Hallo Kostas,
es ist tatsächlich nicht ganz einfach. Nach vielen vergeblichen Versuchen mit Arc hat es schließlich mit AngleArc funktioniert:
Delphi-Quellcode:
Gruß Hawkeye
BeginPath(Canvas.Handle);
MoveToEx(Canvas.Handle, s2.x, s2.y, nil); AngleArc(Canvas.Handle, offset.x, offset.y, r1 div 2, -TrackBar2.Position, -TrackBar1.Position); AngleArc(Canvas.Handle, offset.x, offset.y, r2 div 2, -(TrackBar2.Position + TrackBar1.Position), TrackBar1.Position); EndPath(Canvas.Handle); |
Re: Eine Region erzeugen mit BeginPath ... EndPath
Zitat:
Herzlichen Dank Hawkeye219, es funkt einwandfrei, und der code ist auch schlanker geworden. Gruß Kostas
Delphi-Quellcode:
var
offset,s:TPoint; R1,R2:integer; Alpha:real; Region : HRGN; FillColor:TBrush; begin //Zentrum des Bogens offset.x:=300; offset.y:=300; R1:=200; //Äußerer Bogen R2:=140; //Innerer Bogen Alpha := DegToRad(TrackBar2.position); //Startwinkel //Startpunkt der Schnittpunktlinie Bogen innen s.x := offset.x + Round((r2 div 2) * (cos(Alpha))); s.y := offset.y + Round((r2 div 2) * (sin(Alpha))); canvas.brush.Color:=clWhite; canvas.FillRect(canvas.ClipRect); Canvas.brush.Color:=clRed; BeginPath(Canvas.Handle); MoveToEx(Canvas.Handle, s.x, s.y, nil); AngleArc(Canvas.Handle, offset.x, offset.y, r1 div 2, -TrackBar2.Position, -TrackBar1.Position); AngleArc(Canvas.Handle, offset.x, offset.y, r2 div 2, -(TrackBar2.Position + TrackBar1.Position), TrackBar1.Position); EndPath(Canvas.Handle); FillPath(Canvas.Handle); |
Re: Eine Region erzeugen mit BeginPath ... EndPath
So funkte es jetzt auch mit der Region zum anklicken.
Gruß Kostas
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if PtInRegion(Region, X, Y) then bsm('gefunden'); end;
Delphi-Quellcode:
procedure TForm1.Bogen;
var offset,s:TPoint; R1,R2:integer; Alpha:real; FillColor:TBrush; begin //Zentrum des Bogens offset.x:=300; offset.y:=300; R1:=200; //Äußerer Bogen R2:=140; //Innerer Bogen Alpha := DegToRad(TrackBar2.position); //Startwinkel //Startpunkt der Schnittpunktlinie Bogen innen s.x := offset.x + Round((r2 div 2) * (cos(Alpha))); s.y := offset.y + Round((r2 div 2) * (sin(Alpha))); canvas.brush.Color:=clWhite; canvas.FillRect(canvas.ClipRect); Canvas.brush.Color:=clRed; BeginPath(Canvas.Handle); MoveToEx(Canvas.Handle, s.x, s.y, nil); AngleArc(Canvas.Handle, offset.x, offset.y, r1 div 2, -TrackBar2.Position, -TrackBar1.Position); AngleArc(Canvas.Handle, offset.x, offset.y, r2 div 2, -(TrackBar2.Position + TrackBar1.Position), TrackBar1.Position); EndPath(Canvas.Handle); Region := PathToRegion(Canvas.Handle); PaintRgn(Canvas.Handle, Region); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz