a.创建自己的窗口过程AllocateHWnd,销毁DeallocateHWnd
b.创建自己的定时器,在窗口过程响应WM_TIMER消息
代码
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class (TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
WindowHandle: HWnd;
public
{ Public declarations }
procedure WndProc( var Msg:TMessage);
procedure UpdateTimer;
end ;
var
Form1: TForm1;
bSetTimer: Boolean = True;
implementation
{ $R *.dfm }
procedure TForm1.WndProc( var Msg: TMessage);
begin
with Msg do
if Msg = WM_TIMER then
try
Caption : = FormatDateTime( ' HH:NN:SS ' ,now);
except
Application.HandleException(Self);
end
else
Result : = DefWindowProc(WindowHandle, Msg, wParam, lParam);
end ;
procedure TForm1.UpdateTimer;
begin
KillTimer(WindowHandle, 1 );
if bSetTimer then
if SetTimer(WindowHandle, 1 , 1 , nil ) = 0 then
raise EOutOfResources.Create( ' Create Timer Error! ' );
end ;
procedure TForm1.FormCreate(Sender: TObject);
begin
WindowHandle : = AllocateHWnd(WndProc);
if bSetTimer then UpdateTimer;
end ;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bSetTimer : = False;
UpdateTimer;
DeallocateHWnd(WindowHandle);
end ;
end .
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class (TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
WindowHandle: HWnd;
public
{ Public declarations }
procedure WndProc( var Msg:TMessage);
procedure UpdateTimer;
end ;
var
Form1: TForm1;
bSetTimer: Boolean = True;
implementation
{ $R *.dfm }
procedure TForm1.WndProc( var Msg: TMessage);
begin
with Msg do
if Msg = WM_TIMER then
try
Caption : = FormatDateTime( ' HH:NN:SS ' ,now);
except
Application.HandleException(Self);
end
else
Result : = DefWindowProc(WindowHandle, Msg, wParam, lParam);
end ;
procedure TForm1.UpdateTimer;
begin
KillTimer(WindowHandle, 1 );
if bSetTimer then
if SetTimer(WindowHandle, 1 , 1 , nil ) = 0 then
raise EOutOfResources.Create( ' Create Timer Error! ' );
end ;
procedure TForm1.FormCreate(Sender: TObject);
begin
WindowHandle : = AllocateHWnd(WndProc);
if bSetTimer then UpdateTimer;
end ;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bSetTimer : = False;
UpdateTimer;
DeallocateHWnd(WindowHandle);
end ;
end .