Подскажите пожалуйста как анимировать иконку в трее ?
На форме анимация работает. А в трее нет. Где и чего нужно исправить?
Может, кто подскажет !
Буду очень благодарен!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, Menus, ExtCtrls,ShellApi, StdCtrls;
type
TForm1 = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
PopupMenu1: TPopupMenu;
Form11: TMenuItem;
Exit1: TMenuItem;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Exit1Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure Form11Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand);message WM_SYSCOMMAND;
{ Private declarations }
public
{Здесь мы объявлем процедуру, которая будет выполнятся каждый раз, когда
на иконке будет происходит какое-либо событие (клик мышки и т.п.)}
procedure IconCallBackMessage( var Mess : TMessage ); message WM_USER + 100;
{ Public declarations }
end;
var
Form1: TForm1;
iconindex : Integer;
implementation
{$R *.dfm}
// Отлавливаем момент если форма сворачивается,тогда выполнить что-либо?
procedure TForm1.WMSysCommand;
begin
if Msg.CmdType = SC_MINIMIZE
then
//Сдесь делаем что нужно}
Form1.Hide;
else
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
nid : TNotifyIconData;
begin
{Добавляем иконку в трей при старте программы: Указываем параметры иконки,
для чего используем структуру TNotifyIconData.}
with nid do
begin
//Размер все структуры
cbSize := SizeOf( TNotifyIconData );
{Здесь мы указывает Handle нашей главной формы которая будет получать
сообщения от иконки. }
Wnd := Form1.Handle;
//Идентификатор иконки
uID := 0;
{Обозначаем то, что в параметры входят: Иконка, сообщение и текст
подсказки (хинта).}
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
{Здесь мы указываем, какое сообщение должна высылать иконочка нашей главной форме,
в тот момент, когда на ней (иконке) происходят какие-либо события }
uCallbackMessage := WM_USER + 100;
StrPCopy(szTip,'Form1');
{Указываем на Handle иконки (изображения)
(в данной случае берем иконку основной формы приложения.}
hIcon := Application.Icon.Handle;
//Application.Icon.Handle;
end;
//Отпровляем иконку Трее
Shell_NotifyIcon( NIM_ADD , @nid );
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Перерисовываем иконку
ImageList1.GetIcon(iconindex, Application.Icon);
iconindex := iconindex + 1;
if iconindex > 1
then
iconindex := 0;
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
SetForegroundWindow(Form1.Handle);
end;
procedure TForm1.IconCallBackMessage( var Mess : TMessage );
begin
case Mess.lParam of
WM_LBUTTONUP : Form11Click(Form1); //'левоя кнопка мыши'
WM_RBUTTONUP : Form1.PopupMenu1.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
end;
end;
procedure TForm1.Form11Click(Sender: TObject);
begin
//Показываем главное окно
Form1.Show;
Form1.Activate;
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Form1.Close
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid : TNotifyIconData;
begin
with nid do
begin
{Удаляем иконку из трея. Параметры мы вводим для того,
чтобы функция точно знала, какую именно иконку надо удалять.
Обратите внимание, что здесь мы исползуем константу
NIM_DELETE (удаление иконки).}
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle;
end;
Shell_NotifyIcon( NIM_DELETE, @nid );
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Close
end;
end.