You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

窗体最小化时WindowState属性异常问题求助

问题解答

为何WindowState显示为wsNormal而非wsMinimized?

这是FireMonkey(FMX)框架的特性:WindowState属性是FMX封装的状态,并非实时同步原生操作系统窗口的状态。当窗体被最小化到任务栏时,FMX的状态更新逻辑可能没有及时响应原生窗口的变化(尤其是在定时器这类非用户交互触发的事件中),导致WindowState仍返回wsNormal,和真实的窗口状态不符。

如何正确判断窗体是否最小化?

直接读取原生操作系统窗口的状态,绕过FMX的封装层:

方法1:使用GetWindowPlacement

var
  WP: TWindowPlacement;
begin
  WP.length := SizeOf(TWindowPlacement);
  GetWindowPlacement(WindowHandleToPlatform(MainForm.Handle).Wnd, @WP);
  if WP.showCmd = SW_SHOWMINIMIZED then
  begin
    ShowWindow(WindowHandleToPlatform(MainForm.Handle).Wnd, SW_RESTORE);
  end;
  MainForm.Bounds := TRect.Create(0, 0, 200, 200);
end;

方法2:使用GetWindowLong

if (GetWindowLong(WindowHandleToPlatform(MainForm.Handle).Wnd, GWL_STYLE) and WS_MINIMIZE) <> 0 then
begin
  ShowWindow(WindowHandleToPlatform(MainForm.Handle).Wnd, SW_RESTORE);
end;
MainForm.Bounds := TRect.Create(0, 0, 200, 200);

这两种方式直接与操作系统交互,能准确获取窗口的真实状态,避免FMX封装层的状态不同步问题。

内容的提问来源于stack exchange,提问作者Haifisch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:07:17