gpt4 book ai didi

delphi - 构造函数运行后如何设置CreateParams?

转载 作者:行者123 更新时间:2023-12-03 18:13:48 27 4
gpt4 key购买 nike

  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

关于delphi - 构造函数运行后如何设置CreateParams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com