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

如何让VCL独立表单不受主表单影响始终保持置顶?

解决VCL小型表单随主表单最小化的问题

问题原因

你当前的代码虽设置了fsStayOnTop,但小型表单仍属于主应用的窗口组,主表单最小化时系统会联动处理同一应用下的所有窗口,导致小型表单也被最小化。要让它完全独立,需将其脱离主应用的窗口层级,直接挂靠到桌面窗口。

具体修改方案

  1. 修改TSmallForm的FormCreate事件
    在原有代码基础上,添加将窗口父级设置为桌面窗口的逻辑,确保窗口独立于主表单:

    procedure TSmallForm.FormCreate(Sender: TObject);
    begin
      FormStyle := fsStayOnTop;
      self.BorderStyle := bsNone;
    
      AlphaBlend := True;
      AlphaBlendValue := 50;
      self.Color := clRed;
    
      left := 100;
      top := 100;
      width := 15;
      height := 15;
    
      // 将窗口父级设为桌面,脱离主应用窗口组
      ParentWindow := GetDesktopWindow;
      // 强制保持窗口显示状态,不受主表单操作影响
      ShowWindow(Handle, SW_SHOW);
    
      self.Show;
    end;
    
  2. 额外说明

    • GetDesktopWindow() 获取桌面窗口句柄,将小型表单父窗口设为桌面后,它不再属于主应用窗口集合,主表单的最小化操作不会再影响它。
    • 若需要更强的系统级置顶效果,可将FormStyle改为fsSystemStayOnTop,此时小型表单会置顶于所有其他应用窗口之上(注意该样式需谨慎使用,避免干扰用户正常操作)。
    • 创建小型表单时使用TSmallForm.Create(nil)的方式是合理的,保持Owner为nil可避免主表单销毁时自动释放小型表单(如需手动管理生命周期)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:09