我想尽量减少Delphi应用程序到系统托盘而不是任务栏。德尔福:最小化应用程序到系统
必要的步骤似乎是以下几点:
- 创建然后应显示在系统托盘图标。
- 当用户点击[ - ],以最小化应用程序,执行以下操作:
- 隐藏的形式。
- 将图标(步骤#1)添加到系统托盘。
- 隐藏/删除应用程序在任务栏中的条目。
- 当用户双击在系统托盘应用程序的图标,请执行以下操作:
- 显示形式。
- 再次将应用程序最小化并将其带到最前面。
- 如果“WindowState”是“WS_Minimized”设置为“WS_Normal”。
- 隐藏/删除系统托盘中的应用程序图标。
- 当用户终止应用程序,请执行以下操作:
- 隐藏/删除在系统托盘应用程序的图标。
就是这样。对?
怎么能在Delphi中实现这个?
我发现了下面的代码,但我不知道它为什么起作用。它不遵循上述我的步骤...
unit uMinimizeToTray;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;
const WM_NOTIFYICON = WM_USER+333;
type
TMinimizeToTray = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CMClickIcon(var msg: TMessage); message WM_NOTIFYICON;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
MinimizeToTray: TMinimizeToTray;
implementation
{$R *.dfm}
procedure TMinimizeToTray.CMClickIcon(var msg: TMessage);
begin
if msg.lparam = WM_LBUTTONDBLCLK then Show;
end;
procedure TMinimizeToTray.FormCreate(Sender: TObject);
VAR tnid: TNotifyIconData;
HMainIcon: HICON;
begin
HMainIcon := LoadIcon(MainInstance, 'MAINICON');
Shell_NotifyIcon(NIM_DELETE, @tnid);
tnid.cbSize := sizeof(TNotifyIconData);
tnid.Wnd := handle;
tnid.uID := 123;
tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
tnid.uCallbackMessage := WM_NOTIFYICON;
tnid.hIcon := HMainIcon;
tnid.szTip := 'Tooltip';
Shell_NotifyIcon(NIM_ADD, @tnid);
end;
procedure TMinimizeToTray.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Hide;
end;
end.
它曾经是该TApplication的是,创建任务栏条目中的一个,和TForms自由地独立行事。到最近为止这个变化了吗? – 2010-05-22 18:42:47
你使用的是什么版本的Delphi?在更新的版本中,VCL中有一个TTrayIcon,至少可以用来创建托盘图标。 – 2010-05-22 19:32:23
代码与你的步骤不同, - 系统托盘图标始终可见, - 它不会干扰“最小化”(没有第2步),当图标被双击时,它显示通过单击关闭框[X]隐藏的窗体, - 也是它不考虑终止(没有第4步)。 – 2010-05-22 21:47:39