我有一个bsNone Bordestyle的形式,具有透明度。 要显示任务栏上的图标,我加入了创建过程中的以下代码:如何在Delphi中的任务栏上显示具有透明度和无边框的表单?
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
end;
有了这个,显示图标,但透明度不起作用。 有什么建议吗? 谢谢。
我有一个bsNone Bordestyle的形式,具有透明度。 要显示任务栏上的图标,我加入了创建过程中的以下代码:如何在Delphi中的任务栏上显示具有透明度和无边框的表单?
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
end;
有了这个,显示图标,但透明度不起作用。 有什么建议吗? 谢谢。
窗口风格,扩展和标准,是集合位标志。您已设置WS_EX_APPWINDOW
扩展样式,但清除了所有其他扩展样式。你打算做的是使用按位或将WS_EX_APPWINDOW
扩展样式与现有的扩展样式相结合。
ExStyle := GetWindowLong(Form.Handle, GWL_EXSTYLE);
SetWindowLong(Form.Handle, GWL_EXSTYLE, ExStyle or WS_EX_APPWINDOW);
但是,拨打SetWindowLong
是错误的方法。 Delphi窗口可能会重新创建,并且它们在什么时候重新应用样式。因此,代码的正确位置是覆盖CreateParams
方法。
procedure TMyForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
但是,设置WS_EX_APPWINDOW
通常是将按钮放到任务栏上的错误方法。只要该窗口是无主窗口,它将在任务栏上有一个按钮。您可以通过在CreateParams
中将MainFormOnTaskbar
设置为True
或将WndParent
设置为0来实现。
非常感谢。 – elcharlie
您是否理解我关于使用'CreateParams'的观点?你是否明白我的意思可能根本不需要使用'WS_EX_APPWINDOW'? –
它完美的作品。谢谢。 – elcharlie