【问题标题】:How to hide my TaskBar icon from the TaskBar at run-time?如何在运行时从任务栏中隐藏我的任务栏图标?
【发布时间】:2021-03-21 00:46:23
【问题描述】:

我已从以下网址下载 CoolTrayIcon v.4.4.0:

https://torry.net/files/vcl/system/trayicons/CoolTrayIcon.zip

在Delphi 10.4.2中安装组件后,在demo文件夹中,我打开了项目“CoolTrayTest”。在这个项目中,我在一个按钮点击处理程序中执行以下代码:

if IsWindowVisible(Application.Handle) then
  ShowWindow(Application.Handle, SW_HIDE);

这会隐藏任务栏图标。

但是当我在自己的 VCL 应用程序中尝试此代码时,任务栏图标并未隐藏。

如何让我自己的 VCL 应用程序也使用此代码隐藏任务栏图标? (我不想在程序启动时隐藏TaskBar图标,而是故意点击一个按钮)。

编辑:根据 Remy 的建议,我使用以下代码:

procedure TForm1.btnTestClick(Sender: TObject);
var
  T: System.Win.Taskbar.TWinTaskbar;
begin
  T := System.Win.Taskbar.TWinTaskbar.Create;
  try
    if not FTaskBarButtonIsHidden then
    begin
      IsOK := T.DeleteTab(Self.Handle);
      CodeSite.Send('TForm1.btnTestClick: DeleteTab', IsOK);
      FTaskBarButtonIsHidden := IsOK;
    end
    else
    begin
      IsOK := T.AddTab(Self.Handle);
      CodeSite.Send('TForm1.btnTestClick: AddTab', IsOK);
      FTaskBarButtonIsHidden := not IsOK;
    end;
  finally
    T.Free;
  end;
end;

它似乎工作。这有什么副作用吗?

【问题讨论】:

  • 将 MainFormOnTaskbar 设置为 false。
  • Delphi 自古就带有TTrayIcon 组件...
  • @DelphiCoder TTrayIcon 用于管理系统托盘通知图标。 OP 正在尝试管理应用程序的任务栏按钮。两种不同的东西。
  • @RemyLebeau 我知道这两件事。只是想为 OP 提一下,这样他就可以摆脱大约 15(!)岁的第 3 方依赖项(此后未更新,Unicode 可能存在问题)!

标签: delphi winapi taskbar system-tray delphi-10.4-sydney


【解决方案1】:

Application.ShowMainFormOnTaskbar 属性为False 时,就像CoolTrayIcon 演示中的情况一样,任务栏按钮归隐藏的Application 窗口所有。

ShowMainFormOnTaskbar 改为True 时(现代Delphi 项目中的默认情况),则任务栏按钮归Application.MainForm 窗口而非Application 窗口所有。

要隐藏/显示任务栏按钮,您需要隐藏/显示其所有者窗口。

或者,您可以使用 Win32 ITaskbarList Shell 接口的 DeleteTab()AddTab() 方法。

有关更多详细信息,请参阅有关 The Taskbar 的文档。特别是“管理任务栏按钮”和“修改任务栏内容”部分。

【讨论】:

  • 感谢您提供的信息!当我将Application.MainFormOnTaskBar := False; 放在主窗体的OnCreate 事件处理程序中时,我会在任务栏上看到 TWO (!) 图标!我怎样才能避免这种情况?
  • 现在我已经解决了两个图标的问题,而不是在表单的 OnCreate 事件处理程序中进行,而是在 DPR 文件中将 Application.MainFormOnTaskbar := True; 更改为 Application.MainFormOnTaskbar := False;。这样做有什么副作用吗?
  • 请在问题中查看我的编辑。
  • 似乎无法获取我的任务栏图标是显示还是隐藏的信息。何获得此信息?
  • @user1580348 在OnCreate 事件中更改ShowMainFormOnTaskbar 为时已晚,需要在创建任一窗口之前在DPR 中进行设置。是的,弄乱ShowMainFormOnTaskbar 会有副作用,很多 VCL 与操作系统的集成都与之相关,所以我建议始终将其设置为 True 以获得最佳的操作系统支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多