// 1.
"EllipsePoint" // Getestet mit D2010 unter Win7
function EllipsePoint(X, Y, RX, RY, St, Zl: Integer): TPoint;
var
W: Single;
MX, MY: Integer;
begin
MX := X + RX;
MY := Y + RY;
W := (St / Zl) * (2 * Pi);
Result.X := Round(MX + sin(W) * RX);
Result.Y := Round(MY - cos(W) * RY);
end;
// Beispiel 1
procedure TForm1.Button1Click(Sender: TObject);
var
P: TPoint;
Start, Anzahl, RadiusX, RadiusY, Links, Oben, I, R: Integer;
begin
Start := 0;
Anzahl := 60;
Links := 30;
Oben := 20;
RadiusX := 100;
RadiusY := 100;
for I := Start to Anzahl - 1 do
begin
P := EllipsePoint(Links, Oben, RadiusX, RadiusY, Start, Anzahl);
with Canvas do
begin
if I mod 5 = 0 then
begin
Brush.Color := clRed;
R := 5;
end
else
begin
Brush.Color := clSilver;
R := 3;
end;
Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R);
end;
inc(Start);
if Start = Anzahl then
Start := 0;
end;
end;
// Beispiel 2
procedure TForm1.Button2Click(Sender: TObject);
var
P: TPoint;
Start, Anzahl, RadiusX, RadiusY, Links, Oben, I, R, X, Y: Integer;
SZ: TSize;
S: String;
begin
Start := 1;
Anzahl := 12;
Links := 275;
Oben := 30;
RadiusX := 100;
RadiusY := 100;
R := 22;
for I := Start to Anzahl do
begin
P := EllipsePoint(Links, Oben, RadiusX, RadiusY, I, Anzahl);
with Canvas do
begin
Brush.Color := clYellow;
Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R);
Brush.Style := bsClear;
S := IntToStr(I);
SZ := Canvas.TextExtent(S);
X := P.X - SZ.CX div 2;
Y := P.Y - SZ.CY div 2;
Textout(X, Y, S);
end;
end;
end;
// Beispiel 3
procedure TForm1.Button3Click(Sender: TObject);
var
P: TPoint;
Start, Anzahl, RadiusX, RadiusY, Links, Oben, I, R: Integer;
begin
Start := 5;
Anzahl := 20;
Links := 530;
Oben := 30;
RadiusX := 60;
RadiusY := 110;
R := 5;
with Canvas do
begin
Brush.Color := clLime;
for I := Start to Anzahl do
begin
P := EllipsePoint(Links, Oben, RadiusX, RadiusY, I, Anzahl);
Rectangle(P.X - R, P.Y - R, P.X + R, P.Y + R);
end;
end;
end;
// Beispiel 4
procedure TForm1.Button4Click(Sender: TObject);
var
P: TPoint;
Start, Anzahl, RadiusX, RadiusY, Links, Oben, I, R: Integer;
begin
Start := -3;
Anzahl := 12;
Links := 700;
Oben := 30;
RadiusX := 100;
RadiusY := RadiusX;
R := 15;
with Canvas do
begin
Brush.Color := clFuchsia;
for I := Start to -Start do
begin
P := EllipsePoint(Links, Oben, RadiusX, RadiusY, I, Anzahl);
Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R);
end;
end;
end;
------------------------------------------------------------------------------- // 2. "DrawArc" bzw. "DrawPie" // Wenn man EllipsePoint weiter denkt, kann man damit Teil-Ellipsen // innerhalb eines Rechtecks unter Angabe des Start- und Endwinkels // (in Grad) zeichnen. Die Variable Clockwise regelt dabei, ob das // Zeichnen im oder gegen den Uhrzeigersinn geschieht. // Siehe auch: Pie Prozent und Winkel berechnen
procedure DrawArcPie(Cnv: TCanvas; R: TRect; StartAngle, EndAngle: Single;
DPie: Boolean; Clockwise: Boolean);
var
MX, MY, RX, RY, SA, EA, P2: Single;
TP, SX, SY, EX, EY: Integer;
begin
P2 := PI / 180;
RX := (R.Right - R.Left) / 2;
RY := (R.Bottom - R.Top) / 2;
MX := R.Left + RX;
MY := R.Top + RY;
SA := StartAngle * P2;
EA := EndAngle * P2;
SX := Round(MX + sin(SA) * RX);
SY := Round(MY - cos(SA) * RY);
EX := Round(MX + sin(EA) * RX);
EY := Round(MY - cos(EA) * RY);
if Not Clockwise then
begin
TP := EX;
EX := SX;
SX := TP;
TP := EY;
EY := SY;
SY := TP;
end;
if DPie then
Pie(Cnv.Handle, R.Left, R.Top, R.Right, R.Bottom, EX, EY, SX, SY)
else
Arc(Cnv.Handle, R.Left, R.Top, R.Right, R.Bottom, EX, EY, SX, SY);
end;
procedure DrawArc(Cnv: TCanvas; R: TRect; StartAngle, EndAngle: Single;
Clockwise: Boolean = True);
begin
DrawArcPie(Cnv, R, StartAngle, EndAngle, False, Clockwise);
end;
procedure DrawPie(Cnv: TCanvas; R: TRect; StartAngle, EndAngle: Single;
Clockwise: Boolean = True);
begin
DrawArcPie(Cnv, R, StartAngle, EndAngle, True, Clockwise);
end;
// Beispiel 5
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Pen.Color := clBlack;
Canvas.Pen.width := 2;
DrawArc(Canvas, rect(10, 10, 210, 260), 270, 45);
end;
// Beispiel 6
procedure TForm1.Button2Click(Sender: TObject);
begin
Canvas.Pen.Color := clred;
Canvas.Pen.width := 5;
DrawArc(Canvas, rect(250, 10, 460, 110), 45, 270);
end;
// Beiispiel 7
procedure TForm1.Button3Click(Sender: TObject);
begin
Canvas.Pen.Color := clGreen;
Canvas.Brush.Color := clYellow;
Canvas.Pen.width := 2;
DrawPie(Canvas, rect(10, 210, 210, 460), 270, 45, False);
end;
// Beispiel 8
procedure TForm1.Button4Click(Sender: TObject);
begin
Canvas.Pen.Color := clGray;
Canvas.Brush.Color := clLime;
Canvas.Pen.width := 5;
DrawPie(Canvas, rect(250, 210, 460, 410), 45, 270, False);
end;
|
Zugriffe seit 6.9.2001 auf Delphi-Ecke





