unit pro36_pas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure ClockFrame(Sender: TObject);
procedure UpdateClock(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
OldH, OldM, OldSX, OldSY, OldMX, OldMY,
OldHX, OldHY : Integer;
FirstDraw : Boolean;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ClockFrame(Sender: TObject);
Var
A, R, Xo, Yo, X, Y : Integer;
Begin
Xo:=Width Div 2;
Yo:=Height Div 2;
If Yo < Xo Then R:=Yo-30 Else R:=Xo-30;
For A:=0 to 12 Do
Begin
X:=Xo+Round(R*Sin(30*A*Pi/180));
Y:=Yo-Round(R*Cos(30*A*Pi/180));
Canvas.Brush.Color:=clGreen;
Canvas.Ellipse(X-4,Y-4,X+4,Y+4);
End;
End;
procedure TForm1.UpdateClock(Sender: TObject);
Var
DateTime : TDateTime;
Xo, Yo, Xs, Ys, Xm, Ym, Xh, Yh, H, M, S, Rs, Rm, Rh : Integer;
begin
DateTime:=Time;
Caption:=' '+FormatDateTime('hh:nn:ss AM/PM',DateTime);
Xo:=Form1.Width Div 2;
Yo:=Form1.Height Div 2;
Rs:=Yo-50;
Rm:=Rs;
Rh:=Rs-50;
H:=StrToInt(Copy(FormatDateTime('hh AM/PM',DateTime),1,2));
M:=StrToInt(FormatDateTime('nn',DateTime));
S:=StrToInt(FormatDateTime('ss',DateTime));
Xs:=Xo+Round(Rs*Sin(S*6*Pi/180));
Ys:=Yo-Round(Rs*Cos(S*6*Pi/180));
Xm:=Xo+Round(Rm*Sin(M*6*Pi/180));
Ym:=Yo-Round(Rm*Cos(M*6*Pi/180));
Xh:=Xo+Round(Rh*Sin((H*30+M/2)*Pi/180));
Yh:=Yo-Round(Rh*Cos((H*30+M/2)*Pi/180));
If Not FirstDraw Then
Begin
Form1.Canvas.Pen.Color:=clBlack;
Form1.Canvas.Pen.Width:=1;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(OldSX,OldSY);
End Else
Form1.Canvas.Pen.Mode:=pmNotXor;
Form1.Canvas.Pen.Color:=clBlack;
Form1.Canvas.Pen.Width:=1;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(Xs,Ys);
OldSX:=Xs;
OldSY:=Ys;
If FirstDraw Then
Begin
Form1.Canvas.Pen.Color:=clGreen;
Form1.Canvas.Pen.Width:=2;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(Xm,Ym);
OldMX:=Xm;
OldMY:=Ym;
Form1.Canvas.Pen.Color:=clMaroon;
Form1.Canvas.Pen.Width:=3;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(Xh,Yh);
OldHX:=Xh;
OldHY:=Yh;
End;
If (OldMX <> Xm) Or (OldMY <> Ym) Then
Begin
Form1.Canvas.Pen.Color:=clGreen;
Form1.Canvas.Pen.Width:=2;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(OldMX,OldMY);
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(Xm,Ym);
OldMX:=Xm;
OldMY:=Ym;
End;
If (OldHX <> Xh) Or (OldHY <> Yh) Then
Begin
Form1.Canvas.Pen.Color:=clMaroon;
Form1.Canvas.Pen.Width:=3;
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(OldHX,OldHY);
Form1.Canvas.MoveTo(Xo,Yo);
Form1.Canvas.LineTo(Xh,Yh);
OldHX:=Xh;
OldHY:=Yh;
End;
End;
procedure TForm1.Timer1Timer(Sender: TObject);
Begin
UpDateClock(Self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FirstDraw:=True;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
FirstDraw:=True;
ClockFrame(Self);
UpDateClock(Self);
FirstDraw:=False;
end;
end.