Hallo,
ich als Delphi Anfänger habe mir vorgenommen eine Analoge Uhr grafisch umzusetzen.
Eine digitale Uhr war kein grosses Problem, doch an der Analoguhr bin ich dann gescheitert. Ich habe mir dann von irgendeiner Website eine Lösung kopiert, wie ich die X und Y Koordinate vom Ende des Zeigers ermitteln kann, aber verstanden hab ich das noch nicht...
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var min,sec,hr,msec : word;
m, s, h : String;
xm,ym,xa,xb,xc,ya,yb,yc : Integer;
a,b,c : real;
bitmap : tbitmap;
z : Tcanvas;
begin
//Bitmap erstellen
bitmap := tbitmap.Create;
bitmap.Height := paintbox1.Height;
bitmap.Width := paintbox1.Width;
z := bitmap.Canvas;
// Paintboxgröße
paintbox1.Width := 300;
paintbox1.Height := 300;
//Digitale Uhr
DecodeTime(time,hr,min,sec,msec);
if hr < 10 then h := '0' + inttostr(hr) else h := inttostr(hr);
if sec < 10 then s := '0' + inttostr(sec) else s := inttostr(sec);
if min < 10 then m := '0' + inttostr(min) else m := inttostr(min);
panel1.Caption := h+':'+m+':'+s;
//Kreis
z.Ellipse(0,0,300,300);
//Mittelpunkt
xm := paintbox1.Width DIV 2;
ym := paintbox1.Height DIV 2;
//Winkel
a := -( 6 * sec)-( 6/1000 * msec);
b := -( 6 * min)-( 1/10 * sec )-(1/10000 * msec);
c := -(30 * hr )-( 1/2 * min )-(1/120 * sec);
// Zeiger
//SEC
xa := Trunc(sin(a * Pi / 180) *(-150))+150;
ya := Trunc(cos(a * Pi / 180) *(-150))+150;
//MIN
xb := Trunc(sin(b * Pi /180) *(-150))+120;
yb := Trunc(cos(b * Pi /180) *(-150))+120;
//HR
xc := Trunc(sin(c * Pi /180) *(-100))+100;
yc := Trunc(cos(c * Pi /180) *(-100))+100;
//Zeichnen!
z.Pen.Color := clred;
z.MoveTo(xm,ym);
z.LineTo(xa,ya);
z.Pen.Color := clblack;
z.Pen.Width := 2;
z.MoveTo(xm,ym);
z.LineTo(xb,yb);
z.Pen.Width := 3;
z.MoveTo(xm,ym);
z.LineTo(xc,yc);
paintbox1.Canvas.Draw(0,0,bitmap);
bitmap.free;
end;
Ich hoffe ihr könnt mir eventuell die Sache mit den Winkeln erklären, unser Informatiklehrer meinte nur dies hätte etwas mit rechtwinkligen Dreiecken (ich komme aber irgendwie nicht drauf, wie es in einem Kreis rechtwinklige Dreiecke mit den Zeigern und dem Mittelpunkt geben kann ;( ) zu tun - In dieser Beziehung haben wir SIN, COS und TAN auch schon im Matheunterricht behandelt (ich gehe in die 9. Klasse)
Es funktioniert übrigens & ich habe noch nicht an dem Ziffernblatt gearbeitet.