【问题标题】:How to show a form with transparency and no border on the task bar in Delphi?如何在Delphi的任务栏上显示透明且无边框的表单?
【发布时间】:2013-11-28 08:28:28
【问题描述】:

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

procedure TForm1.FormCreate(Sender: TObject);
begin
   SetWindowLong(Handle,  GWL_EXSTYLE, WS_EX_APPWINDOW);
end;

这样,图标会显示,但透明度不起作用。 有什么建议么? 谢谢。

【问题讨论】:

  • 完美运行。谢谢。

标签: winforms forms delphi transparency taskbar


【解决方案1】:

扩展的和标准的窗口样式是位标志的。您已设置 WS_EX_APPWINDOW 扩展样式,但清除了所有其他扩展样式。您的意思是使用按位 OR 将 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 来实现。

【讨论】:

  • 你明白我关于使用CreateParams 的观点吗?你明白我说的可能根本不需要使用WS_EX_APPWINDOW 的意思吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2020-02-22
  • 2013-02-13
  • 1970-01-01
相关资源
最近更新 更多