Einzelnen Beitrag anzeigen

Kostas

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

Re: Eine Region erzeugen mit BeginPath ... EndPath

  Alt 28. Jan 2007, 20:39
Zitat von Hawkeye219:
Hallo Kostas,

es ist tatsächlich nicht ganz einfach. Nach vielen vergeblichen Versuchen mit Arc hat es schließlich mit AngleArc funktioniert:

Delphi-Quellcode:
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);
Gruß Hawkeye

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);
  Mit Zitat antworten Zitat