gpt4 book ai didi

delphi - 如何正确恢复FMX表单?

转载 作者:行者123 更新时间:2023-12-02 07:35:30 25 4
gpt4 key购买 nike

使用菜单栏按钮最小化 FMX 表单,然后通过单击任务栏图标进行恢复将使表单返回前台,但不会激活窗口。窗体也“直接”最小化,而不是应用将窗口“缩小”到任务栏的动画。表单 OnActivate 事件不会被触发。

奇怪的是,如果我修补 WindowProc 并在停用时使用 SW_RESTORE 调用 ShowWindow,则单击任务栏图标后表单将正确恢复。我不知道为什么。但最小化动画仍然没有被触发。

procedure TForm1.WindowProc(var Msg: TMessage);
begin
case Msg.Msg of
WM_ACTIVATE: if (Msg.WParamLo = WA_INACTIVE) then ShowWindow(WindowHandleToPlatform(Handle).Wnd, SW_RESTORE);
end;
Msg.Result := CallWindowProc(OrgWndProc, WindowHandleToPlatform(Handle).Wnd, Msg.Msg, Msg.WParam, Msg.LParam);
end;

我可以在 Windows 8 上使用空白 FMX HD 表单观察到此行为。这对我来说似乎是一个明显的错误,是否有更好的方法来解决它?

最佳答案

我想我通过修改FMX.Platform.Win.pas文件解决了这个问题。在 TPlatformWin.CreateAppHandle 方法中,您需要注释(或删除)这些行:

FApplicationHWND := CreateWindowEx(WS_EX_WINDOWEDGE or WS_EX_APPWINDOW, FMAppClass.lpszClassName,
PChar(LApplicationTitle), WS_POPUP or WS_GROUP, 0, 0, 0, 0, GetDesktopWindow, 0, HInstance, nil);
Winapi.Windows.ShowWindow(FApplicationHWND, SW_SHOWNORMAL);

我认为该解决方案来自 Embarcadero 讨论论坛。该消息已消失,但无论如何我都会给您链接以防它返回:https://forums.codegear.com/thread.jspa?messageID=556541&#556541

关于delphi - 如何正确恢复FMX表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313956/

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