怎样编程实现指针式的时钟?

解决方案 »

  1.   

    unit Unit1;interfaceuses
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
      Forms, Dialogs, ExtCtrls, Menus;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Image1: TImage;
        Timer1: TTimer;
        PopupMenu1: TPopupMenu;
        Close1: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure Close1Click(Sender: TObject);
      private
        { Private declarations }
        FirstTime     : Boolean;
        vho, vmo, vso : Real;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    var
      i : Integer;
    begin
      with Form1.Image1.Canvas do begin
        Pen.Color := clWhite;
        Pen.Style := psSolid;
        Brush.Color := clWhite;
        Brush.Style := bsSolid;
        Rectangle(0,0,Width,Height);    Pen.Color := clBlack;
        for i:=1 to 12 do
          Pixels[60+Round(60*Sin(i/12.0*2*Pi)),60-Round(60*Cos(i/12.0*2*Pi))] := clBlack;
      end;  FirstTime := True;  Form1.Panel1.Left := 0;
      Form1.Panel1.Top := 0;
      Form1.Width := Form1.Panel1.Width;
      Form1.Height := Form1.Panel1.Height;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      MyNow      : TDateTime;
      Hour, Min,
      Sec, mSec  : Word;
      vh, vm, vs : Real;
    begin
      MyNow := Now;
      DecodeTime(MyNow,Hour,Min,Sec,mSec);  vh := Hour/12.0*2*Pi;
      vm := Min/60.0*2*Pi;
      vs := Sec/60.0*2*Pi;  with Form1.Image1.Canvas do begin
        if not FirstTime then begin
          Pen.Color := clWhite;
          MoveTo(60,60);
          LineTo(60+Round(40*Sin(vho)),60-Round(40*Cos(vho)));
          MoveTo(60,60);
          LineTo(60+Round(55*Sin(vmo)),60-Round(55*Cos(vmo)));
          MoveTo(60,60);
          LineTo(60+Round(55*Sin(vso)),60-Round(55*Cos(vso)));
        end
        else
          FirstTime := False;
        Pen.Color := clBlack;
        MoveTo(60,60);
        LineTo(60+Round(40*Sin(vh)),60-Round(40*Cos(vh)));
        Pen.Color := clBlack;
        MoveTo(60,60);
        LineTo(60+Round(55*Sin(vm)),60-Round(55*Cos(vm)));
        Pen.Color := clRed;
        MoveTo(60,60);
        LineTo(60+Round(55*Sin(vs)),60-Round(55*Cos(vs)));
      end;  vho := vh;
      vmo := vm;
      vso := vs;
    end;procedure TForm1.Close1Click(Sender: TObject);
    begin
    close;
    end;end.
      

  2.   

    个用delphi写的带指针精美的时钟的源程序 ,自己写的找不到了,给你一个更好的
    http://www.8860.net/delphicode/dispdoc.asp?id=84