gpt4 book ai didi

windows - 为Firemonkey表单捕获最小化事件?

转载 作者:行者123 更新时间:2023-12-03 11:13:25 24 4
gpt4 key购买 nike

我正在尝试做一个非常简单的任务...检测何时最小化了我的表单。
但是似乎Firemonkey绝对没有办法解决这个问题。
我尝试使用AllocateHWnd截获WM_SYSCOMMAND消息,但我得到的只是WM_ACTIVATEAPP消息,仅此而已。

CreateForm:
AllocateHWnd(WndProcHandler);
WndProcHandler:

procedure TfrmMain.WndProcHandler(var Message: TMessage);
begin
if Message.msg = WM_SYSCOMMAND then
OutputDebugStringA('got command');
end;

最佳答案

使用以下代码进行处理。
查找WM_SIZE命令和SIZE_MINIMIZED参数以检测所有最小化事件。

uses
Winapi.Windows, Winapi.Messages;

var
WndProcHook: THandle;

function WndProc(Code: integer; WParam, LParam: LongInt): LRESULT; stdcall;
var
msg: TCWPRetStruct;
begin;
if (Code >= HC_ACTION) and (LParam > 0) then begin
msg := PCWPRetStruct(LParam)^;
if (msg.Message = WM_SIZE) and (msg.WParam = SIZE_MINIMIZED) then begin
// Application has been minimized
// Check msg.wnd = WindowHandleToPlatform(Form1.Handle).wnd if necessary
end;
end;
result := CallNextHookEx(WndProcHook, Code, WParam, LParam)
end;

initialization
WndProcHook := SetWindowsHookEx(WH_CALLWNDPROCRET, @WndProc, 0, GetCurrentThreadId);

finalization
UnhookWindowsHookEx(WndProcHook);

关于windows - 为Firemonkey表单捕获最小化事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014963/

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