API有隐藏的MessageBoxTimeOut函数可以做计时对话框,缺点是不能显示还剩下多少秒关闭。
其实只要获得对话框的句柄就可以用时间器修改窗体或者按钮标题实现倒计时提示。
窗体激活后可以通过Hook CBT捕获HCBT_ACTIVATE
参考如下方法:
- const
- IDTIMEDOUT = 32000;
- function MessageBoxTimeOut(hWnd: HWND;
- lpText: PChar; lpCaption: PChar; uType: UINT; wLanguageId: WORD;
- dwMilliseconds: DWORD): Integer; stdcall; external
- user32 name 'MessageBoxTimeoutA';
窗体激活后可以通过Hook CBT捕获HCBT_ACTIVATE
参考如下方法:
- var
- hookHandle: THandle;
- dialogHandle: THandle;
- second: Integer;
- function CBTHookCallback(nCode: Integer;
- wParam: WPARAM;
- lParam: LPARAM
- ): Integer; stdcall;
- begin
- case nCode of
- HCBT_ACTIVATE:
- begin
- dialogHandle := wParam;
- second := 5;
- UnhookWindowsHookEx(hookHandle);
- end;
- end;
- Result := CallNextHookEx(hookHandle, nCode, wParam, lParam);
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin<