unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
var winkel: Real;
    x, y, x1, y1, r, i: Integer;
    hour, min, sec, msec: Word;
begin
        Form1.Caption := DateTimeToStr(Now);

        (*alte Grafik löschen*)
        Refresh;

        (*Einpassen des Kreises in das Fenster*)
         if Width <= Height
                then r := Width div 3
                else r := Height div 3;


        (*Umwandlung in einzelne Integer-Werte*)
        DecodeTime(Now, hour, min, sec, msec);

        (*Sekundenzeiger*)
        winkel := sec * (((2 * pi) / 60)) - pi / 2;

        x := Trunc(Cos(winkel)* r);
        y := Trunc(Sin(winkel)* r);

        x := x + (Width div 2);
        y := y + (Height div 2);

        Canvas.Moveto(Width div 2, Height div 2);
        Canvas.LineTo(x, y);

        (*Minutenzeiger*)
        winkel := min * (((2 * pi) / 60)) - pi / 2;

        x := Trunc(Cos(winkel)* r);
        y := Trunc(Sin(winkel)* r);

        x := x + (Width div 2);
        y := y + (Height div 2);

        Canvas.Moveto(Width div 2, Height div 2);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2) + 1, (Height div 2) + 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2) + 1, (Height div 2) - 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2 - 1), (Height div 2) + 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2 - 1), (Height div 2) - 1);
        Canvas.LineTo(x, y);

        (*Stundenzeiger*)
        if hour > 12 then hour := hour -12;
        winkel := (hour * (2 * pi) / 12) + (min * (2 * pi) / 720) - pi / 2;

        x := Trunc(Cos(winkel)* r * 0.61);
        y := Trunc(Sin(winkel)* r * 0.61);

        x := x + (Width div 2);
        y := y + (Height div 2);

        Canvas.Moveto(Width div 2, Height div 2);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2) + 1, (Height div 2) + 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2) + 1, (Height div 2) - 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2 - 1), (Height div 2) + 1);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2 - 1), (Height div 2) - 1);
        Canvas.LineTo(x , y);
        Canvas.Moveto((Width div 2) + 2, (Height div 2) + 2);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2) + 2, (Height div 2) - 2);
        Canvas.LineTo(x , y);
        Canvas.Moveto((Width div 2 - 2), (Height div 2) + 2);
        Canvas.LineTo(x, y);
        Canvas.Moveto((Width div 2 - 2), (Height div 2) - 2);
        Canvas.LineTo(x , y);

        (*Mittelpunkt*)
        Canvas.Ellipse((Width div 2)-4, (Height div 2)-4,(Width div 2)+ 4,(Height div 2)+ 4);

        (*Ziffernstriche*)
         i := 0;
         FOR i := 0 TO 11 DO
         begin
         winkel := i * (((2 * pi) / 12)) - pi / 2;

         x := Trunc(Cos(winkel)* 1.1*r);
         x1 := Trunc(Cos(winkel)* r);
         y := Trunc(Sin(winkel)* 1.1*r);
         y1 := Trunc(Sin(winkel)* r);

         x := x + (Width div 2);
         x1 := x1 + (Width div 2);
         y := y + (Height div 2);
         y1 := y1 + (Height div 2);
        Canvas.Moveto(x, y);
        Canvas.LineTo(x1, y1);
         end;

        (*Minutenpunkte*)
         i := 0;
         FOR i := 0 TO 59 DO
         begin
         winkel := i * (((2 * pi) / 60)) - pi / 2;

         x := Trunc(Cos(winkel)* 1.1*r);
         y := Trunc(Sin(winkel)* 1.1*r);

         x := x + (Width div 2);
         y := y + (Height div 2);
          Canvas.Pixels[x, y] := clRed;
         Canvas.Ellipse(x-2, y-2,x+2,y+2);
         end;

end;

end.