gpt4 book ai didi

delphi - [x] 秒后关闭 Delphi 对话框

转载 作者:行者123 更新时间:2023-12-03 14:37:20 26 4
gpt4 key购买 nike

是否可以让 Delphi 在一定时间后关闭 ShowMessage 或 MessageDlg 对话框?

我想在应用程序关闭时向用户显示一条消息,但不想让应用程序停止关闭超过 10 秒左右。

我可以让默认对话框在定义的时间后关闭,还是需要编写自己的表单?

最佳答案

当模态对话框或系统消息框或类似事件处于事件状态(或打开菜单时),您的应用程序实际上仍在工作,只是正在运行一个辅助消息循环来处理所有消息 - 发送或发布到的所有消息它也会在必要时合成(并处理)WM_TIMERWM_PAINT 消息。

因此,无需创建线程或跳过任何其他环节,您只需安排在 10 秒过去后运行关闭消息框的代码即可。一个简单的方法是调用 SetTimer()没有目标 HWND,但有回调函数:

procedure CloseMessageBox(AWnd: HWND; AMsg: UINT; AIDEvent: UINT_PTR;
ATicks: DWORD); stdcall;
var
Wnd: HWND;
begin
KillTimer(AWnd, AIDEvent);
// active window of the calling thread should be the message box
Wnd := GetActiveWindow;
if IsWindow(Wnd) then
PostMessage(Wnd, WM_CLOSE, 0, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
TimerId: UINT_PTR;
begin
TimerId := SetTimer(0, 0, 10 * 1000, @CloseMessageBox);
Application.MessageBox('Will auto-close after 10 seconds...', nil);
// prevent timer callback if user already closed the message box
KillTimer(0, TimerId);
end;

错误处理被忽略,但这应该可以帮助您开始。

关于delphi - [x] 秒后关闭 Delphi 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com