Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Eigenes Shape anklickbar machen

  Alt 28. Jan 2007, 17:21
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.
  Mit Zitat antworten Zitat