Hallo Zusammen,
also ich habe jetzt mal den Bogen fertig. Über zwei TrackBars
kann der Öffnungswinkel und die Position von 0-360 Grad bestimmt werden.
Wenn mann genauer hinschaut, sieht mann das durch Rundungsfehler
wegen integer Pixel-Koordinate die Schnittpunkte nicht genau auftreffen.
Vermutlich wird genau dass das Problem sein warum keine Region erzeugt erzeugt werden kann.
Denn genau das ist mein Problem, es wird keine Region erzeugt.
Lauf Doku können zwischen BeginPath und EndPath mehrere Zeichenwerkzeuge verwendet werden.
Und wie könnte ich bitte den Bogen mit Farbe füllen?
Gruß Kostas
Delphi-Quellcode:
var
offset,p1,p2,p3,p4,s1,e1,s2,e2:TPoint;
R1,R2:integer;
Alpha,Alpha2:real;
Region : HRGN;
begin
//Zentrum des Bogens
offset.x:=300;
offset.y:=300;
R1:=200; //Äußerer Bogen
R2:=140; //Innerer Bogen
//Eckpunkt links-oben der Äußeren Ellipse
p1.x := offset.x - (R1 div 2);
p1.y := offset.y - (R1 div 2);
//Eckpunkt rechts-unten der Äußeren Ellipse
p2.x := offset.x + (R1 div 2);
p2.y := offset.y + (R1 div 2);
//Eckpunkt links-oben der Inneren Ellipse
p3.x := offset.x - (R2 div 2);
p3.y := offset.y - (R2 div 2);
//Eckpunkt rechts-unten der Inneren Ellipse
p4.x := offset.x + (R2 div 2);
p4.y := offset.y + (R2 div 2);
Alpha := DegToRad(TrackBar2.position); //Startwinkel
Alpha2 := DegToRad(TrackBar2.position + TrackBar1.position); //Öffnungswinkel
//Startpunkt der Schnittpunktlinie Bogen außen
s1.x := offset.x + Round((r1 div 2) * (cos(Alpha)));
s1.y := offset.y + Round((r1 div 2) * (sin(Alpha)));
//Endpunkt der Schnittpunktlinie Bogen außen
e1.x := offset.x + Round((r1 div 2) * (cos(Alpha2)));
e1.y := offset.y + Round((r1 div 2) * (sin(Alpha2)));
//Startpunkt der Schnittpunktlinie Bogen innen
s2.x := offset.x + Round((r2 div 2) * (cos(Alpha)));
s2.y := offset.y + Round((r2 div 2) * (sin(Alpha)));
//Endpunkt der Schnittpunktlinie Bogen innen
e2.x := offset.x + Round((r2 div 2) * (cos(Alpha2)));
e2.y := offset.y + Round((r2 div 2) * (sin(Alpha2)));
//canvas refreshen
canvas.FillRect(canvas.ClipRect);
// 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}
Edit: Ich denke mittlerweile ist das eine Frage für Multimedia gewortden.
Da ich den Beitrag selbt nicht verschieben kann, werde ich die Frage Region... neu erstellen.
Ich hoffe das ist so in Ordnung.