delphi - 如何在运行时从任务栏中隐藏我的任务栏图标?
问题描述
我已从以下位置下载 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;
它似乎工作。这有什么副作用吗?
解决方案
当Application.ShowMainFormOnTaskbar
属性为False
时,就像 CoolTrayIcon 演示中的情况一样,任务栏按钮归隐藏Application
窗口所有。
ShowMainFormOnTaskbar
相反,在True
现代 Delphi 项目中默认情况下,任务栏按钮属于Application.MainForm
窗口而不是Application
窗口。
要隐藏/显示任务栏按钮,您需要隐藏/显示其所有者窗口。
或者,您可以使用Win32 Shell 接口的DeleteTab()
和方法。AddTab()
ITaskbarList
有关更多详细信息,请参阅有关任务栏的文档。特别是“管理任务栏按钮”和“修改任务栏内容”部分。
推荐阅读
- flutter - 为 iOS Flutter App 创建构建时面临的问题
- python - Python Salesforce 连接
- python-3.x - os.listdir(filename): 没有这样的文件或目录
- chart.js - chart.JS 时间轴标签应该只是小时格式
- javascript - 如何使用javascript将servlet响应传递给html文本
- java - Hibernate NameGenerator 中带有 hql 查询的 NullpointerException
- matlab - 在Matlab中绘图时如何使同一组中的条具有相同的颜色
- c# - 反序列化 JSON 和访问元素
- ansible - Ansible:如何安装多个 rpm 但每个操作系统一个?
- linux - Linux C:访问共享内存时常失败