Delphi 12.1 FMX自定义按钮无法正常最小化窗体问题
Delphi 12.1 FMX窗体自定义按钮最小化不全的解决办法
当FMX窗体设置了以下属性时,调用内置的WindowState := TWindowState.wsMinimized无法让窗体完全最小化:
BorderStyle设为NoneBorderIcon全部取消勾选Transparency设为True
窗体仅包含带自定义样式按钮的面板,点击自定义按钮触发最小化事件但失效。
以下是几种可行的解决方法:
方法一:调用Windows系统API(Windows平台专属)
FMX在无边框+透明的场景下,内置的最小化逻辑可能无法正确触发系统级行为,直接调用Windows API可以绕过这个问题。
首先在单元中引入Winapi.Windows,然后修改按钮点击事件代码:
procedure TForm_Main.Button_MinClick(Sender: TObject); begin ShowWindow(Handle, SW_MINIMIZE); end;
该方法直接调用系统窗口管理函数,确保窗体完全最小化到任务栏。
方法二:临时调整透明属性(跨平台兼容思路)
如果需要跨平台支持,可以先关闭窗体透明再执行最小化操作,后续在窗体恢复时重新开启透明:
- 修改按钮点击事件:
procedure TForm_Main.Button_MinClick(Sender: TObject); begin Transparency := False; WindowState := TWindowState.wsMinimized; end;
- 在窗体的
OnRestore事件中恢复透明:
procedure TForm_Main.FormRestore(Sender: TObject); begin Transparency := True; end;
方法三:检查控件层级
确认窗体上所有控件都正确挂载到主面板或窗体本身,没有存在脱离主窗体的顶层悬浮控件——这类控件可能导致最小化时残留显示,破坏完全最小化的效果。
内容的提问来源于stack exchange,提问作者Zakaria Mimeche
相关产品推荐
相关产品推荐

