【问题标题】:Non-Modal Child Window That Allows Mainform To Be Drawn On Top - Delphi允许在顶部绘制主窗体的非模态子窗口 - Delphi
【发布时间】:2010-10-31 03:07:35
【问题描述】:

在 Delphi (2009 Pro) - 我有一个可以创建非模态子窗口的主窗体。我希望无论哪种形式都有焦点绘制在顶部 - 即使它是具有焦点的主窗口。

【问题讨论】:

    标签: delphi non-modal


    【解决方案1】:

    多个窗口不能同时获得焦点。我假设您的意思是,当只有 MainForm 具有焦点时,您希望您的非模态子表单位于顶部。您是否尝试过将子窗体的 FormStyle 属性设置为 fsStayOnTop?

    【讨论】:

    • 他不想完全相反吗?主窗体应该能够成为 Delphi 2007 和 2009 更改的其他窗口之上。
    【解决方案2】:

    在 Delphi 2007/2009 中,VCL 改变了它关于表单父级的行为。在 Delphi 1-2006 中,表单的父级是隐藏的应用程序窗口 (Application.Handle)。在 Delphi 2007/2009 中,窗体的父级是主窗体,主窗体的父级是桌面。

    如果您想更改此设置,您可以将 *.dpr 行 Application.MainFormOnTaskbar 更改为 False,这样可以恢复旧行为,但也会使您的应用程序在 Vista 和 Windows 7 中看起来很奇怪。或者您可以覆盖所有非模态子窗体中的虚拟 CreateParams 方法,并将 Params.WndParent 字段设置为桌面 (HWND_DESKTOP) 或仍然存在的 Application.Handle

    type
      TMyChildForm = class(TForm)
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      end;
    
    procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      Params.WndParent := Application.Handle;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-24
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多