首页 > 解决方案 > 如何在运行时从任务栏中隐藏我的任务栏图标?

问题描述

我已从以下位置下载 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图标,而是故意点击一个按钮)。

编辑:按照雷米的建议,我使用以下代码:

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;

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

标签: delphiwinapitaskbarsystem-traydelphi-10.4-sydney

解决方案


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

ShowMainFormOnTaskbar相反,在True现代 Delphi 项目中默认情况下,任务栏按钮属于Application.MainForm窗口而不是Application窗口。

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

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

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


推荐阅读