我有一个简单的单元,其中有一个窗体和一个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样式之一,如碳这不是一个问题。
有什么想法吗?
1条答案
按热度按时间yqhsw0fo1#
这与VCL样式无关,这是标准的Windows行为。
您可以在任何主题Windows版本上获得相同的行为,而不仅仅是在 Delphi 应用程序中。
在非MDI设置中,你不应该把一个有边框的窗口作为另一个窗口的“子窗口”。这是非常不寻常和奇怪的。几乎没有Windows应用程序会这样做。(Win32 MDI也是相当古老的。)
它可以工作(尽管有一些怪癖),但正如您所观察到的,Windows不会给子窗口提供全套的视觉效果。
对此你能做(或应该做)的不多。
你最好的选择是不要做这样奇怪的事情:不要让有边框的窗口成为另一个窗口的子窗口。