delphi写的时钟

来源:互联网 发布:数据分析有什么证书 编辑:程序博客网 时间:2024/04/28 04:34

很久以前写的程序了,要整理机器,只好放到这了

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    procedure windowsposchange(var Msg:TWMWINDOWPOSCHANGING);
    message WM_WINDOWPOSCHANGING;
    procedure Timer2Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
    Hour, Minute, Second: Word; {当前时间}
    OldMinute, OldSecond: Word; {旧时间}
    XCenter, YCenter, Radius: Integer; {当前窗体大小}
  public
    { Public declarations }
    procedure DrawHand (XCenter, YCenter, Radius,
      BackRadius: Integer; Angle: Real);
    procedure DrawSecond;
  end;

var
  Form1: TForm1;
  oleft:Integer;
  otop:Integer;
  owidth:Integer;
  oheight:Integer;
implementation

{$R *.dfm}

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  self.Caption := '桌面时钟 '+datetimetostr(now);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  hesc:word;
begin
  oldminute := minute;
  oldsecond := second;
  SysUtils.DecodeTime(time,hour,minute,second,hesc);

  if oldminute = minute then
    drawsecond
  else
    refresh;
end;

procedure tform1.DrawSecond;
var
  Angle,OldAngle :real;
begin
  oldangle := 2*pi*(oldsecond+45)/60;
  drawhand(XCenter, YCenter, Radius,
    Radius * 30 div 100, OldAngle);

  angle := 2*pi*(second+45)/60;
  drawhand(XCenter, YCenter, Radius,
    Radius * 30 div 100, angle);
end;

procedure tform1.DrawHand(XCenter, YCenter, Radius,
  BackRadius: Integer; Angle: Real);
begin
  form1.Canvas.MoveTo(XCenter - Round (BackRadius * Cos (Angle)),
  YCenter - Round (BackRadius * Sin (Angle)));
  form1.Canvas.LineTo (
    XCenter + Round (Radius * Cos (Angle)),
    YCenter + Round (Radius * Sin (Angle)));
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  Angle: Real;
  I, X, Y, Size: Integer;
begin
   xcenter := clientwidth div 2;
   ycenter := clientheight div 2;

   if xcenter > ycenter then
      radius := ycenter-10
   else
      radius := xcenter-10;

   self.Canvas.Pen.Color := clblue;
   self.Canvas.Pen.Mode := Graphics.pmCopy ;
   self.Canvas.Brush.Color := clwhite;
   size := radius div 50 +1;
   for I := 0 to 11 do
    begin
      Angle := 2 * Pi * (I + 9)/12;
      X := XCenter - Round(Radius*Cos(Angle));
      Y := YCenter - Round(Radius*Sin(Angle));
      Canvas.Ellipse (X - Size, Y - Size, X + Size, Y + Size);
    end;

    //画分针
    self.Canvas.Pen.Width := 2;
   self.Canvas.Pen.Color := clblue;
   angle := 2*pi*(minute+45)/60;
   DrawHand (XCenter, YCenter,
      Radius * 90 div 100, 0, Angle);
    Angle := 2 * Pi * (Hour + 9 + Minute / 60) / 12;//画时针
  DrawHand (XCenter, YCenter,
  Radius * 70 div 100, 0, Angle);

  Canvas.Pen.Width := 1;  //画秒针
  Canvas.Pen.Color := clRed;
  Canvas.Pen.Mode := pmNotXor;
  Angle := 2 * Pi * (Second+45) / 60;
  DrawHand (XCenter, YCenter, Radius,
  Radius * 30 div 100, Angle);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SELF.Timer1Timer(SELF);
  OLEFT := LEFT;
  OTOP := top;
  owidth := width;
  oheight := height;
  self.Caption := '桌面时钟 '+ datetimetostr(now);
end;

procedure tform1.windowsposchange(var Msg:TWMWINDOWPOSCHANGING);
begin
  Msg.WindowPos.x:=oleft;
  Msg.WindowPos.y:=otop;
  Msg.WindowPos.cx:=owidth;
  Msg.WindowPos.cy:=oheight;
  inherited;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Refresh;
end;

end.

原创粉丝点击