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

如何将程序第二个窗体设为主窗体并使其最小化到任务栏?

解决主窗体最小化不显示在任务栏的问题

Windows仅会为顶级无父窗口且带有WS_EX_APPWINDOW扩展样式的窗口创建任务栏按钮。你的问题根源在于主窗体被识别为非顶级窗口(可能因ShowModal继承了登录窗体的父属性),导致Windows不将其判定为应用主窗口。

以下是两种可行的解决方法:

方法1:调整程序主窗体配置(推荐)

将主应用窗体设为程序的默认主窗体(在项目设置中切换主窗体为应用窗体),启动时先隐藏主窗体,再显示登录窗体:

  1. 在主窗体的OnCreate事件中添加代码:
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      Hide;
      if LoginForm.ShowModal <> mrOk then
      begin
        Application.Terminate;
        Exit;
      end;
      Show;
    end;
    
  2. 登录窗体验证通过时,设置ModalResult := mrOk并关闭;验证失败则设置ModalResult := mrCancel,主窗体据此决定是否终止程序。

这种方式下主窗体是程序的顶级窗口,Windows会自动识别它为应用主窗口,最小化时正常显示在任务栏。

方法2:修改主窗体窗口样式(适配原有启动逻辑)

若必须保持登录窗体先启动、再ShowModal主窗体的逻辑,需手动调整主窗体的窗口属性:
在主窗体的OnCreate事件中添加代码:

procedure TMainForm.FormCreate(Sender: TObject);
begin
  // 移除工具窗口样式,添加应用窗口样式
  SetWindowLongPtr(Handle, GWL_EXSTYLE,
    (GetWindowLongPtr(Handle, GWL_EXSTYLE) and not WS_EX_TOOLWINDOW) or WS_EX_APPWINDOW);
  // 强制设置为顶级无父窗口
  SetParent(Handle, 0);
end;

关键注意事项

  • 禁止将主窗体的Parent属性设置为登录窗体,子窗口不会获得任务栏按钮。
  • 确保主窗体的FormStyle属性为fsNormal,避免使用fsMDIChild等非顶级窗体样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:57:19