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

Delphi VCL无边界应用点击任务栏图标无法二次最小化求助

解决Delphi VCL无边界窗口任务栏点击切换失效问题

当窗口设置BorderIcons = []且BorderStyle = bsNone时,系统默认的任务栏按钮交互逻辑会失效,导致无法通过点击任务栏图标在最小化/还原状态间切换。以下是两种可行的解决方法:

方法一:添加WS_SYSMENU窗口风格

通过修改窗口底层风格,恢复系统原生的任务栏交互逻辑:

在窗口单元中添加如下代码:

procedure TYourForm.CreateWnd;
begin
  inherited;
  // 为窗口添加WS_SYSMENU风格
  SetWindowLongPtr(Handle, GWL_STYLE, GetWindowLongPtr(Handle, GWL_STYLE) or WS_SYSMENU);
end;

添加该风格后,系统会自动处理任务栏按钮的点击切换,无需额外编写状态切换逻辑。

方法二:手动处理WM_SYSCOMMAND消息

如果需要自定义交互逻辑,可以重写窗口的WndProc方法,手动响应任务栏点击事件:

procedure TYourForm.WndProc(var Message: TMessage);
begin
  inherited;
  if Message.Msg = WM_SYSCOMMAND then
  begin
    case Message.WParam of
      SC_MINIMIZE:
        WindowState := wsMinimized;
      SC_RESTORE:
        WindowState := wsNormal;
      SC_TASKLIST: // 任务栏点击触发的系统命令
        begin
          if WindowState = wsNormal then
            WindowState := wsMinimized
          else if WindowState = wsMinimized then
            WindowState := wsNormal;
        end;
    end;
  end;
end;

注意:两种方法任选其一即可,方法一更贴近系统原生行为,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:23:34