Jen*_*off 3 delphi vcl window delphi-xe2
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;
  TForm2 = class(TForm)
  private
    FAppWindow: Boolean;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    property AppWindow: Boolean read FAppWindow write FAppWindow;
  end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.AppWindow := True;
  Form2.Show;
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  if FAppWindow then begin
    Params.Style := Params.Style or WS_EX_APPWINDOW;
    Params.WndParent := 0;
  end;
end;
这不起作用,因为窗口句柄是在 TForm 的构造函数期间创建的,因此CreateParams运行得太早并且FAppWindow始终为False。
编写自定义构造函数也不起作用,因为您最终必须调用继承的构造函数来创建句柄,然后才能将任何数据保存到实例:
constructor TForm2.CreateAppWindow(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FAppWindow := True;
end;
有没有办法:
如何从类的“外部”更改表单的样式?
最简单的解决方案是将参数传递给表单的构造函数,而不是等到表单创建完成。
这意味着您需要引入一个构造函数,TForm2该构造函数接受您需要在 中传递的任何信息作为参数CreateParams。
在调用继承的构造函数之前记下任何状态。WS_EX_APPWINDOW另外,当您将所有者设置为零时,无需进行设置。