简易时钟

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.

 

posted @ 2011-12-13 11:13  endsnow  阅读(283)  评论(0)    收藏  举报