创建自己的窗口过程,创建自己的定时器

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.

原文地址:https://www.cnblogs.com/Jekhn/p/1913449.html