Delphi中用MessageBox()API函数做倒计时对话框。

在Delphi中,通过创建自定义的Hook回调函数CBTHookCallback,结合MessageBoxTimeOut API,可以实现倒计时功能的对话框。当对话框激活时,设置一个定时器进行倒计时,并修改对话框上的按钮文本。当倒计时结束,自动关闭对话框。同时,此代码示例展示了如何改变对话框中按钮的文本。
摘要由CSDN通过智能技术生成
API有隐藏的MessageBoxTimeOut函数可以做计时对话框,缺点是不能显示还剩下多少秒关闭。
  1. const
  2.   IDTIMEDOUT = 32000;
  3. function MessageBoxTimeOut(hWnd: HWND;
  4.   lpText: PChar; lpCaption: PChar; uType: UINT; wLanguageId: WORD;
  5.   dwMilliseconds: DWORD): Integer; stdcall; external
  6.   user32 name 'MessageBoxTimeoutA';
其实只要获得对话框的句柄就可以用时间器修改窗体或者按钮标题实现倒计时提示。
窗体激活后可以通过Hook CBT捕获HCBT_ACTIVATE
参考如下方法:
  1. var
  2.   hookHandle: THandle;
  3.   dialogHandle: THandle;
  4.   second: Integer;
  5. function CBTHookCallback(nCode: Integer;
  6.   wParam: WPARAM;
  7.   lParam: LPARAM
  8.   ): Integer; stdcall;
  9. begin
  10.   case nCode of
  11.     HCBT_ACTIVATE:
  12.       begin
  13.         dialogHandle := wParam;
  14.         second := 5;
  15.         UnhookWindowsHookEx(hookHandle);
  16.       end;
  17.   end;
  18.   Result := CallNextHookEx(hookHandle, nCode, wParam, lParam);
  19. end;
  20. procedure TForm1.Button1Click(Sender: TObject);
  21. begin<
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值