unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Label1: TLabel; Timer1: TTimer; Timer2: TTimer; procedure FormPaint(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; hour, min, sec, msec: Word; //时,分,秒,微秒 NowTime: TDateTime; //获取当前时间 x, y, r: integer; //圆心的位置x,y和半径rimplementation{$R *.dfm}procedure TForm1.FormPaint(Sender: TObject);var i, j, k, a, b, c, d: Integer;begin r := 100; x := form1.ClientWidth div 2; y := form1.ClientHeight div 2; canvas.Ellipse(x-r, y-r, x+r, y+r); //画圆 canvas.TextOut(x+r-20, y-6, '3'); //输出数字3 canvas.TextOut(x-r+16, y-6, '9'); canvas.TextOut(x-6, y-r+14, '12'); canvas.TextOut(x-2, y+r-26, '6'); for i := 0 to 60 do //画线 begin if i mod 5 = 0 then //是5的倍数画长线 k := 10 else k := 5; j := i * 6; a := round(x + r*cos(j*pi/180)); b := round(y + r*sin(j*pi/180)); c := round(x + (r-k)*cos(j*pi/180)); d := round(y + (r-k)*sin(j*pi/180)); canvas.MoveTo(a,b); canvas.LineTo(c,d); end;end;procedure TForm1.Timer1Timer(Sender: TObject); //画时间的指针var h, m, s: word;begin nowtime := now; //获取当前时间 DecodeTime(nowtime,hour,min,sec,msec); //将当前时间的时分秒微秒分别赋值 h := hour; m := min; s := sec; if s < 15 then //将3:5:15转换成0:0:0 begin s := s - 15 + 60; m := m - 1; end else s := s - 15; if m < 15 then begin m := m - 15 + 60; h := h - 1; end else m := m - 15; if h < 3 then begin h := h + 12 - 3; end else h := h - 3; label1.Caption := formatdatetime('ampmhh:nn:ss',time); canvas.MoveTo(x,y); //画秒针 canvas.LineTo(round(x + (r-30)*cos(360/60 * s * pi/180)), trunc(y + (r-30)*sin(360/60 * s * pi/180))); canvas.MoveTo(x,y); //画分针 canvas.LineTo(round(x + (r-50)*cos(360/60/60 * (m*60+s) * pi/180)), trunc(y + (r-50)*sin(360/60/60 * (m*60+s) * pi/180))); canvas.MoveTo(x,y); //画时针 canvas.LineTo(trunc(x + (r-80)*cos(360/60/60/12 * (h*60*60+m*60+s) * pi/180)), trunc(y + (r-80)*sin(360/60/60/12 * (h*60*60+m*60+s) * pi/180)));end;procedure TForm1.Timer2Timer(Sender: TObject); //刷新begin form1.Refresh;end;end.