Delphi child window 上的 VCL 样式

Delphi VCL style on child window

我有一个带有表单和 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.

如果我没有为创建的表单分配 parent,我将获得默认的 Windows 11 样式。

如果我取消注释行

//Form1.Parent := Self;

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

这似乎是默认的 VCL 样式外观,令人惊讶的是,如果我将外观更改为内置 VCL 样式之一(例如碳),这不是问题。

对此有什么想法吗?

这与 VCL 样式无关,它是标准 Windows 行为。

您在任何主题 Windows 版本上都会获得相同的行为,而不仅仅是在 Delphi 应用程序中。

你真的不应该有一个带边框的 window 作为 child 另一个 window 在 non-MDI设置。这是非常不寻常和奇怪的。几乎没有 Windows 应用程序这样做。 (而且 Win32 MDI 也很古老。)

它有效(尽管有一些怪癖),但 Windows 不会像您观察到的那样为 child window 提供全套视觉效果。

对此你能(或应该)做的不多。

你最好的选择是不要做这样奇怪的事情:不要让带边框的 window 成为另一个 window 的 child。