以前老师布置过作业,我也就写了个时钟,不过很烂,其实就是每秒画一个图,其他都没考虑,你参考下 procedure Form1.showtime;//显示时钟过程后面掉用 var i:Integer; x,y:Double; //半径是150 MYDate:TDateTime; //获取时间 Hour,Min,Sec,MS:Word;//分别定义,小时,分,秒,毫秒 begin Self.ClearCanvas(Canvas); MYDate:=Now; //获取系统当前时间 DecodeTime(MYDate,Hour,Min,Sec,MS); if Hour>12 then Hour:=Hour mod 12;//获取时间 Self.Canvas.Brush.Color:=clred; setviewportOrgEx(Canvas.Handle,Form1.Width div 2,Form1.Height div 2,nil); for i:=0 to 11 do begin x:=150*(cos(Pi/6*i-Pi*1/2)); y:=150*(sin(Pi/6*i-Pi*1/2)); Form1.Canvas.TextOut(trunc(x),trunc(y),'* '); if Hour=i then //画时针, begin Canvas.MoveTo(0,0); Canvas.Pen.Width:=10; x:=90*(cos(Pi/6*i-Pi*1/2)); y:=90*(sin(Pi/6*i-Pi*1/2)); Canvas.LineTo(trunc(x),trunc(y)); end; end; for i:=0 to 59 do begin //分针 if Min=i then begin Canvas.MoveTo(0,0); x:=140*(cos(Pi/30*i-Pi*1/2)); y:=140*(sin(Pi/30*i-Pi*1/2)); Canvas.LineTo(trunc(x),trunc(y)); end; end; for i:=0 to 59 do begin //秒针 if Sec=i then begin Canvas.MoveTo(0,0); Canvas.Pen.Width:=2; x:=150*(cos(Pi/30*i-Pi*1/2)); y:=150*(sin(Pi/30*i-Pi*1/2)); Canvas.LineTo(trunc(x),trunc(y)); end; end; end;procedure TForm1.ClearCanvas(ACanvas: TCanvas); begin with ACanvas do //清空画布 begin Brush.Style:=bsSolid; Brush.Color:=clWhite; FillRect(clientRect); end; end;procedure TForm1.Timer1Timer(Sender: TObject); begin //利用timer来调用showtime画表 Form1.DoubleBuffered:=true; ShowTime; end;
指针是歪的。呵呵~~~~~~~
procedure Form1.showtime;//显示时钟过程后面掉用
var
i:Integer;
x,y:Double; //半径是150
MYDate:TDateTime; //获取时间
Hour,Min,Sec,MS:Word;//分别定义,小时,分,秒,毫秒
begin
Self.ClearCanvas(Canvas);
MYDate:=Now; //获取系统当前时间
DecodeTime(MYDate,Hour,Min,Sec,MS);
if Hour>12 then
Hour:=Hour mod 12;//获取时间
Self.Canvas.Brush.Color:=clred;
setviewportOrgEx(Canvas.Handle,Form1.Width div 2,Form1.Height div 2,nil);
for i:=0 to 11 do
begin
x:=150*(cos(Pi/6*i-Pi*1/2));
y:=150*(sin(Pi/6*i-Pi*1/2));
Form1.Canvas.TextOut(trunc(x),trunc(y),'* ');
if Hour=i then //画时针,
begin
Canvas.MoveTo(0,0);
Canvas.Pen.Width:=10;
x:=90*(cos(Pi/6*i-Pi*1/2));
y:=90*(sin(Pi/6*i-Pi*1/2));
Canvas.LineTo(trunc(x),trunc(y));
end;
end;
for i:=0 to 59 do
begin //分针
if Min=i then
begin
Canvas.MoveTo(0,0);
x:=140*(cos(Pi/30*i-Pi*1/2));
y:=140*(sin(Pi/30*i-Pi*1/2));
Canvas.LineTo(trunc(x),trunc(y));
end;
end;
for i:=0 to 59 do
begin //秒针
if Sec=i then
begin
Canvas.MoveTo(0,0);
Canvas.Pen.Width:=2;
x:=150*(cos(Pi/30*i-Pi*1/2));
y:=150*(sin(Pi/30*i-Pi*1/2));
Canvas.LineTo(trunc(x),trunc(y));
end;
end;
end;procedure TForm1.ClearCanvas(ACanvas: TCanvas);
begin
with ACanvas do //清空画布
begin
Brush.Style:=bsSolid;
Brush.Color:=clWhite;
FillRect(clientRect);
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin //利用timer来调用showtime画表
Form1.DoubleBuffered:=true;
ShowTime;
end;
X^2 + Y^2 = R^2