unit Unit1;
interface
uses
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和半径r
implementation
{$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.