创建自己的窗口过程,创建自己的定时器
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.