gpt4 book ai didi

winforms - 如何在Delphi中的任务栏上显示透明且无边框的窗体?

转载 作者:行者123 更新时间:2023-12-02 02:59:06 30 4
gpt4 key购买 nike

我有一个具有 bsNone Bordestyle 且具有透明度的表单。为了在任务栏上显示图标,我在创建过程中添加了以下代码:

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 通常是将按钮放置到任务栏上的错误方法。只要窗口未被拥有,它就会在任务栏上有一个按钮。您可以通过将 MainFormOnTaskbar 设置为 True 或通过在 CreateParams 中将 WndParent 设置为 0 来实现此目的。

关于winforms - 如何在Delphi中的任务栏上显示透明且无边框的窗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261067/

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