怎么样用delphi做一个windows时钟?()
admin
2023-07-14 06:06:31
0次
本程序运行后,有一个电子钟在桌面上。
1、对象的基本属性:
object Form1: TForm1 Left = 914 Top = -3 BorderIcons = [] BorderStyle = bsNone Caption = 'Form1' ClientHeight = 108 ClientWidth = 100 Color = clBackground TransparentColor = True Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -10 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PopupMenu = PopupMenu1 OnCreate = FormCreate OnPaint = formpaint OnResize = FormResize PixelsPerInch = 96 TextHeight = 13 object PopupMenu1: TPopupMenu Left = 80 Top = 72 object N1: TMenuItem Caption = '退出' OnClick = N1Click end end object Timer1: TTimer Left = 48 Top = 40 end object Timer2: TTimer OnTimer = Timer2Timer Left = 80 Top = 24 endend
2、程序的基本代码:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; N1: TMenuItem; Timer1: TTimer; Timer2: TTimer; procedure Timer2Timer(Sender: TObject); procedure formpaint(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N1Click(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;implementation{$R *.dfm}procedure Tform1.Timer2Timer(Sender: TObject); var hsec:word;begin oldminute:=minute; oldsecond:=second; decodetime(time,hour,minute,second,hsec); drawsecond; refresh; end;procedure TForm1.formpaint(Sender: TObject); var angle:real; I,x,y,size:integer;begin xcenter:=clientwidth div 2; ycenter:=clientheight div 2; if xcenterycenter then radius:=ycenter-10 else radius:=xcenter-10; canvas.Pen.Color:=clred; canvas.Pen.Mode:=pmcopy; canvas.Brush.Color:=clred; 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; {画分针} canvas.Pen.Width:=2; canvas.Pen.Color:=clred; angle:=2*pi*(minute+45)/60; drawhand(xcenter,ycenter,radius*90 div 100,0,angle); {画时针} canvas.Pen.Width :=4; canvas.Pen.Color:=clred; 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:=pmcopy; angle:=2*pi*(second+45)/60; drawhand(xcenter,ycenter,radius*30 div 30,0,angle);end;procedure tform1.drawhand(xcenter,ycenter,radius,backradius:integer;angle:real);begin canvas.MoveTo(xcenter-round(backradius*cos(angle)),ycenter-round(backradius*sin(angle)));canvas.LineTo(xcenter+round(radius*cos(angle)),ycenter+round(radius*sin(angle))); 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.FormResize(Sender: TObject);begin Refresh ; end;procedure TForm1.FormCreate(Sender: TObject);begin form1.Color:=getsyscolor(COLOR_DESKTOP); timer2timer(self); end;procedure TForm1.N1Click(Sender: TObject);begin close;end;end.
本程序在window98+delphi6中运行通过。
楼上取的是电脑时间。。。。电脑是2000年取的也是2000年....
劝你还是别做了,跑的很不准,你想如果单用单片机就能跑准的话,那些时钟芯片还卖啥。
你要问的应该是按键程序吧
vba代码可以实现。。参考如下:
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
Application.OnTime Now() + TimeValue(00:01:00), Timer
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
ActiveSheet.Cells(1, 1).Value = Time
Application.OnTime Now() + TimeValue(00:01:00), Timer
End If
End Sub
Hotkeyid:=GlobalAddAtom(PChar('MonHotKey'))-$C000;
RegisterHotKey(Handle,Hotkeyid,MOD_CONTROL or MOD_ALT,$4D);//注册Ctrl+ALT+M
不知道你的“分开写到这个函数的参数里”是什么意思。
代码不完整,看不出来什么地方出错了。
Label1.caption:=datetostr(now)
相关内容