@GroZ
Uhr mit Zeigern programmieren hat etwas mit Sinus, Cosinus und Pi zu tun.
Gegeben sind x1 und y1 als Position für Mitte. Indirekt ist noch der Winkel gegeben. Ein voller Kreis hat 360°, ein halber Tag 12 Stunden. Den Winkel für eine Stunde kann man somit mit einem Dreisatz berechnen, genauso wie den für eine Minute und eine Sekunde. Dann ist noch der Radius gegeben (Länge des Zeigers):
Delphi-Quellcode:
var
al: Integer = 0;
function LineAnglePoint(Canvas: TCanvas; p: TPoint; r: Integer; Angle: Double): TPoint;
begin
Result.X := p.X + Round(Cos(Angle * Pi / 180) * r);
Result.Y := p.Y - Round(Sin(Angle * Pi / 180) * r);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
p1, p2: TPoint;
r,
x2, y2: Integer;
begin
p1 := Point(100, 100);
r := 100;
Canvas.FillRect(Canvas.ClipRect);
p2 := LineAnglePoint(Canvas, p1, r, al);
Canvas.Polyline([p1, p2]);
Inc(al);
if al >= 360 then al := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
Timer1.Interval := 1;
end;