07.06.2010, 08:52
|
|
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
Код:
unit Unit1;
interface
uses
ShellAPI,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FNOTIFYICONDATA: NOTIFYICONDATA;
public
{ Public declarations }
procedure NOTIFYICONDATACallbackMessage(var AMessage: TMessage); message WM_USER+$1001;
procedure OnMinimize(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ZeroMemory(@FNOTIFYICONDATA, SizeOf(NOTIFYICONDATA));
FNOTIFYICONDATA.cbSize:=SizeOf(NOTIFYICONDATA);
FNOTIFYICONDATA.Wnd:=Handle;
FNOTIFYICONDATA.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;
FNOTIFYICONDATA.uCallbackMessage:=WM_USER+$1001;
FNOTIFYICONDATA.hIcon:=Application.Icon.Handle;
StrPCopy(FNOTIFYICONDATA.szTip, Application.Title);
Shell_NotifyIcon(NIM_ADD, @FNOTIFYICONDATA);
Application.OnMinimize:=OnMinimize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FNOTIFYICONDATA);
end;
procedure TForm1.NOTIFYICONDATACallbackMessage(var AMessage: TMessage);
begin
if AMessage.LParam=WM_LBUTTONDOWN then
begin
ShowWindow(Application.Handle, SW_SHOW);
Application.Restore;
Application.BringToFront;
end;
end;
procedure TForm1.OnMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
end.
для анимации самой иконки в трее добавить таймер и :
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
FNOTIFYICONDATA.cbSize:=SizeOf(NOTIFYICONDATA);
FNOTIFYICONDATA.Wnd:=Handle;
FNOTIFYICONDATA.uFlags:=NIF_ICON;
FNOTIFYICONDATA.hIcon:=<тут меняем handle иконок>;
Shell_NotifyIcon(NIM_MODIFY, @FNOTIFYICONDATA);
end;
|