Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
Delphi 2005 Personal
|
Re: Graphisch Digitale/Analoge Uhr
28. Jan 2004, 20:48
Hallo,
Wenn du die Uhr direkt malen willst, so kann ich dir ein Beispiel zeigen:
analoge Uhr:
also, du nimmst ein leeres Fenster, haust eine Paintbox und einen Timer drauf. Den Interval der Uhr setzt du auf 1000 (ms = 1s).
In das Ereigniss "OnTimer" des Timers gibst du folgendes ein:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
Procedure DrawDigit(Digit:Char; XPos,YPos, Size:Integer; Canvas : TCanvas);
Var I:Integer; X,Y, Breite,Hoehe:Integer;
begin
Breite := Size div 2; {Breite einer Zahl berechnen}
Hoehe := Size; {Hoehe einer Zahl berechnen}
Canvas.MoveTo(XPos,YPos);
case Digit of
':' : begin
X := Breite div 2;
Y := Hoehe div 3;
Canvas.Ellipse(XPos +X -1, YPos + y -1,XPos +X +1,YPos +Y +1);
Canvas.Ellipse(XPos +X -1, YPos + y*2 -1,XPos +X +1,YPos +Y*2 +1);
end;
'.' : begin
X := XPos + Breite div 2;
Y := XPos + Hoehe;
Canvas.Ellipse(X - 1,y-2, X + 1,y);
end;
'0' : begin
Canvas.LineTo(XPos,YPos + Size);
Canvas.LineTo(XPos + Breite,YPos + Hoehe);
Canvas.LineTo(XPos + Breite,YPos);
Canvas.LineTo(XPos,YPos);
end;
'1' : begin
Canvas.MoveTo(XPos,YPos + Size div 3);
Canvas.LineTo(XPos + Breite,YPos);
Canvas.LineTo(XPos + Breite,YPos + Hoehe);
end;
'2' : begin {...}
Canvas.MoveTo(XPos ,YPos + Hoehe div 5);
Canvas.LineTo(XPos ,YPos);
Canvas.LineTo(XPos + Breite ,YPos);
Canvas.LineTo(XPos + Breite ,YPos + Hoehe div 2);
Canvas.LineTo(XPos ,YPos + Hoehe div 2);
Canvas.LineTo(XPos ,YPos + Hoehe);
Canvas.LineTo(XPos + Breite ,YPos + Hoehe);
Canvas.LineTo(XPos + Breite ,YPos + Hoehe - Hoehe div 5);
end;
'3' : begin {...
Hier musst du nun selbst aktiv werden und die anderen Zahlen wie oben malen...}
end;
end;
end;
Var I:Integer; Zeit:String;
begin
Zeit := timetoStr(now); //aktuelle Uhrzeit ermitteln
Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height); //Inhalt der Paintbox löschen
for I:=1 to length(Zeit) do begin
DrawDigit( Zeit[I] , //Die übergebene Ziffer
(5 + abs(PaintBox1.Canvas.Font.Height) div 2) * I, //die X Koordinate der Ziffer (die 5 ist der Abstand)
10, //die Y Koordinate des Textes
abs(PaintBox1.Canvas.Font.Height), //Die Schriftgröße
PaintBox1.Canvas); //wohin gezeichnet werden soll
end;
end;
Ich hoffe mal das dir das weiterhilft.
Gruß
Robs
[Edit]mann sollte sich das auch nochmal durchlesen was man postet [/Edit]
grrrrrrrr
Robert Codito, ergo sum.
>>I code, therefore I am<<
|