子窗口上的 Delphi VCL样式

mbskvtky  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(185)

我有一个简单的单元,其中有一个窗体和一个OnClick,甚至可以在单击主窗体时创建一个新的窗体。

unit DPS.Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DPS.Materials, System.Generics.Collections, Vcl.ExtCtrls, DPS.ChildForm;

type
  TForm6 = class( TForm )
    procedure FormClick( Sender : TObject );

    private
      { Private declarations }

    public
      { Public declarations }

    end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

procedure TForm6.FormClick( Sender : TObject );
  var
    Form1 : TForm;

  begin
    Form1 := TForm.Create( Self );

    //Form1.Parent := Self;

    Form1.Show();
  end;

end.

如果我没有为创建的窗体分配父级,我将获得默认的Windows 11样式。

如果我取消注解掉该行

//Form1.Parent := Self;

我得到了性感的Windows 7舔油漆。

这似乎是一个默认的VCL样式皮肤,因为,令人惊讶的是,如果我改变外观的内置VCL样式之一,如碳这不是一个问题。
有什么想法吗?

yqhsw0fo

yqhsw0fo1#

这与VCL样式无关,这是标准的Windows行为。
您可以在任何主题Windows版本上获得相同的行为,而不仅仅是在 Delphi 应用程序中。
在非MDI设置中,你不应该把一个有边框的窗口作为另一个窗口的“子窗口”。这是非常不寻常和奇怪的。几乎没有Windows应用程序会这样做。(Win32 MDI也是相当古老的。)
它可以工作(尽管有一些怪癖),但正如您所观察到的,Windows不会给子窗口提供全套的视觉效果。
对此你能做(或应该做)的不多。
你最好的选择是不要做这样奇怪的事情:不要让有边框的窗口成为另一个窗口的子窗口。

相关问题