Einzelnen Beitrag anzeigen

Benutzerbild von Spezi1980
Spezi1980

Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Graphisch Digitale/Analoge Uhr

  Alt 28. Jan 2004, 19: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<<
  Mit Zitat antworten Zitat