当没有可用的可见表单时如何始终在任务栏中显示图标
How to show icon always in taskbar when there is no visible form available
我有一个没有任何任务栏图标的系统托盘应用程序。现在大多数系统托盘图标都是隐藏的,我想让应用程序更容易访问。
没有使用 Application.FormCreate 创建的表单,因此 Delphi 无法显示图标本身。
即使没有可用的可见表单,如何始终在任务栏上显示普通应用程序图标?
我想像这样捕捉点击并在点击时显示带有我的自定义功能的 GUI:
class procedure TTrayMain.HandleMessages(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.wparam = SC_RESTORE ) then begin
MenuPopup (popup,2);
Exit;
end;
如果没有 window 来表示,任务栏按钮就不可能存在。要创建的任务栏按钮有 only 3 ways 个:
- 创建具有
WS_EX_APPWINDOW
样式的可见 window
- 创建一个可见的 top-level 无主 window
- 使用
ITaskbarList::AddTab()
所有这些都需要 window。但是,这并不意味着 用户 必须看到 window。您可以创建一个可见的 window 并将 width/height 设置为 0(某些框架会这样做,因此没有单个应用程序 window 拥有任务栏按钮,但该按钮可以 show/hide 整个应用程序作为一个整体),或将其移出屏幕。然后 window 可以根据需要响应状态更改,例如通过任务栏按钮。
否则,由于您的任务栏应用可能有一个隐藏的 window 来接收图标通知,您可以尝试将 window 与 ITaskbarList
一起使用。我只是不知道当用户点击按钮时它是否真的会做任何有意义的事情。因此,考虑更改您的任务栏应用程序以使用可见但不可见的 window 进行通知,然后它可以有一个任务栏按钮而不涉及 ITaskbarList
.
我有一个没有任何任务栏图标的系统托盘应用程序。现在大多数系统托盘图标都是隐藏的,我想让应用程序更容易访问。
没有使用 Application.FormCreate 创建的表单,因此 Delphi 无法显示图标本身。
即使没有可用的可见表单,如何始终在任务栏上显示普通应用程序图标?
我想像这样捕捉点击并在点击时显示带有我的自定义功能的 GUI:
class procedure TTrayMain.HandleMessages(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.wparam = SC_RESTORE ) then begin
MenuPopup (popup,2);
Exit;
end;
如果没有 window 来表示,任务栏按钮就不可能存在。要创建的任务栏按钮有 only 3 ways 个:
- 创建具有
WS_EX_APPWINDOW
样式的可见 window - 创建一个可见的 top-level 无主 window
- 使用
ITaskbarList::AddTab()
所有这些都需要 window。但是,这并不意味着 用户 必须看到 window。您可以创建一个可见的 window 并将 width/height 设置为 0(某些框架会这样做,因此没有单个应用程序 window 拥有任务栏按钮,但该按钮可以 show/hide 整个应用程序作为一个整体),或将其移出屏幕。然后 window 可以根据需要响应状态更改,例如通过任务栏按钮。
否则,由于您的任务栏应用可能有一个隐藏的 window 来接收图标通知,您可以尝试将 window 与 ITaskbarList
一起使用。我只是不知道当用户点击按钮时它是否真的会做任何有意义的事情。因此,考虑更改您的任务栏应用程序以使用可见但不可见的 window 进行通知,然后它可以有一个任务栏按钮而不涉及 ITaskbarList
.