// Teilkreis (Tortenstück, Pie) mittels Prozent- oder Winkelangabe zeichnen.
// Sie aber:
Punkte einer Ellipse festlegen / "ARC" bzw. "PIE"


// Getestet mit D4 unter XP

procedure DrawPie(cnv: TCanvas; x1, y1, x2, y2: integer; 
  background, PiePiece, Border: TColor; Value: single); 
var w, h, dx, dy, x, y, bx, by: integer; 
begin 
  with cnv do begin 
    brush.color := background; 
    pen.color := border; 
    dx := x2 - x1; 
    dy := y2 - y1; 
    w := dx div 2; 
    h := dy div 2; 
    bx := x1 + dx; 
    by := y1 + dy; 
    fillrect(rect(x1, y1, bx, by)); 
    brush.color := PiePiece; 
    x := round(w * sin(value) + w); 
    y := round(-h * cos(value) + h); 
    // --------------- bei Bedarf --------------------------- 
    if (w = x) and (y = 0) then begin 
      if value > 0 then ellipse(x1, y1, bx, by); 
    end else 
    // ------------------------------------------------------ 
      pie(x1, y1, bx, by, x + x1, y + y1, w + x1, y1); 
  end; 
end; 
 
procedure DrawPiePercent(cnv: TCanvas; x1, y1, x2, y2: integer; 
  Hintergrund, PiePart, Border: TColor; Percent: single); 
var value: single; 
begin 
  if (Percent > 100) or (Percent < 0) then 
    raise exception.create('Prozentangabe muss zwischen 0 und 100 liegen.'); 
  value := (Percent / 50) * pi; 
  DrawPie(cnv, x1, y1, x2, y2, Hintergrund, PiePart, Border, value); 
end; 
 
procedure DrawPieAngle(cnv: TCanvas; x1, y1, x2, y2: integer; 
  Hintergrund, PiePart, Border: TColor; Angle: single); 
var value: single; 
begin 
  while Angle < 0 do Angle := Angle + 360; 
  while Angle > 360 do Angle := Angle - 360; 
  value := (Angle / 180) * pi; 
  DrawPie(cnv, x1, y1, x2, y2, Hintergrund, PiePart, Border, value); 
end; 
 
procedure DrawPieCommon(cnv: TCanvas; x1, y1, x2, y2: integer; 
  Hintergrund, PiePart, Border: TColor; min, max, position: single); 
var dff, value: single; 
begin 
  dff := (max - min) / 2; 
  value := ((position - min) / dff) * pi; 
  DrawPie(cnv, x1, y1, x2, y2, Hintergrund, PiePart, Border, value); 
end; 
 
 
 
// Beispielaufrufe 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  DrawPieAngle(canvas, 160, 10, 220, 100, color, 
    clLime, clBlack, 276.9); 
end; 
 
procedure TForm1.Button5Click(Sender: TObject); 
begin 
  DrawPiePercent(canvas, 220, 10, 350, 100, color, 
    clYellow, clBlue, 66.67); 
end; 
 
procedure TForm1.TrackBar1Change(Sender: TObject); 
begin 
  DrawPieCommon(canvas, 20, 10, 110, 100, color, 
    clRed, color, Trackbar1.min, Trackbar1.max, Trackbar1.position); 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke