| 
			| 
					
						| kr 
								Гость
 | 
								|  | «  : 11-02-2010 19:57 »  |  | 
 
   Подскажите пожалуйста как анимировать иконку в трее ? На форме анимация работает. А в трее нет. Где и чего нужно исправить? Может, кто подскажет ! Буду очень благодарен! 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.
 
 
 |  
						| 
								| 
 
										 Трее.7z  (8.84 Кб - загружено 1152 раз.)
									 |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #1 : 12-02-2010 03:51 »  |  | 
 
 в трее не бывает анимации - там надо по таймеру (или тактируя по иному) заменять картинку |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #2 : 12-02-2010 08:51 »  |  | 
 
 Код очень плохо нечитается, но вроде как там по таймеру и сделано. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| x77 
								Модератор
								
								   Offline 
								Пол:    
								меняю стакан шмали на обратный билет с Марса.
								
								
								
								
								
							 | 
								|  | « Ответ #3 : 12-02-2010 13:25 »  |  | 
 
 procedure TForm1.Timer1Timer(Sender: TObject);begin
 // Перерисовываем иконку
 ImageList1.GetIcon(iconindex, Application.Icon);
 iconindex := iconindex + 1;
 if iconindex > 1
 then
 iconindex := 0;
 end;
по таймеру ты заменяешь иконку в приложении (Application.Icon), а кроме этого тебе надо здесь же обновить иконку в трее. |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| glGizma 
								Гость
 | 
								|  | « Ответ #4 : 14-04-2010 07:37 »  |  | 
 
 Не насилуйте мозг, используйте: JVCL / JvTrayIcon |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #5 : 14-04-2010 07:47 »  |  | 
 
 glGizma, а кто такое JVCL / JvTrayIcon ? )) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| x77 
								Модератор
								
								   Offline 
								Пол:    
								меняю стакан шмали на обратный билет с Марса.
								
								
								
								
								
							 | 
								|  | « Ответ #6 : 14-04-2010 07:56 »  |  | 
 
 Алексей1153++, это потомок безвременно почившей либы RxLib. |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| glGizma 
								Гость
 | 
								|  | « Ответ #7 : 14-04-2010 08:37 »  |  | 
 
 =) гугли вам помощь. Там есть всё, что нужно для счастья в среде программирования на Delphi. в общем работайте сами, рекомендую всем:  h**p://cdnetworks-kr-1.dl.sourceforge.net/project/jvcl/JVCL%203/JVCL%203.39/JVCL339CompleteJCL211-Build3536.zip
 |  
						| 
								|  |  
								| « Последнее редактирование: 14-04-2010 08:42 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| x77 
								Модератор
								
								   Offline 
								Пол:    
								меняю стакан шмали на обратный билет с Марса.
								
								
								
								
								
							 | 
								|  | « Ответ #8 : 14-04-2010 11:59 »  |  | 
 
 glGizma, вопрос был задан 2 месяца назад. стоит ли поднимать старую тему ради сомнительного совета ставить 100-меговую библиотеку с >50 компонентами вместо десятка строчек кода? 
 и что за говно по твоей ссылке? официальный сайт проекта - jvcl.jedi-vcl.org, а официальный дистрибутив 339 - это 75 мегабайт, а не 18.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| glGizma 
								Гость
 | 
								|  | « Ответ #9 : 15-04-2010 01:53 »  |  | 
 
 x77Мне вообще по-барабашке, можешь сидеть и рвать, хоть целыми днями, пупок, когда можно обойтись всё одним кликом да + ещё этого дистрибутива достаточно, это и есть офф пак, если умный такой, что же не_рулишь на форуме, а ток критикуешь. И неважно старая или новая тема, посетители всегда найдуцо.
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| glGizma 
								Гость
 | 
								|  | « Ответ #10 : 15-04-2010 01:56 »  |  | 
 
 х77 ты предлагал: (по таймеру ты заменяешь иконку), тока колхоз использует таймер, ты не_хуже меня понимаешь, что таймер для нубов да +ещё таймер забивает память, а ты через  мин 5-ть посмотри скоко он памяти закушает, так-что невариант твой вариант использовать, устаревший = я_б так даже сказал... |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sss 
								Специалист    Offline | 
								|  | « Ответ #11 : 15-04-2010 02:10 »  |  | 
 
 тормоза придумали трусы! А руль извращенцы! |  
						| 
								|  |  
								|  |  Записан | 
 
  while (8==8)  |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #12 : 15-04-2010 04:40 »  |  | 
 
 glGizma, Вот интересно - ты заглядывал в код рекламируемой тобой библиотеки? Если там эта функция есть - то она сделана по таймеру (я имею в виду таймер в понятии WinAPI, а не TTimer).Хотя TTimer это всего лишь удобная обертка вокруг таймера WinAPI. Так что не гони волну что "таймер забивает память".
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #13 : 15-04-2010 05:01 »  |  | 
 
 glGizma, хорош понтоваться. Делом займись. Хоть чем, что умеешь. Двор там подмети, бабушек вокруг светофора поводи |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| x77 
								Модератор
								
								   Offline 
								Пол:    
								меняю стакан шмали на обратный билет с Марса.
								
								
								
								
								
							 | 
								|  | « Ответ #14 :  15-04-2010 12:44 »   |  | 
 
 glGizma, ты сможешь это обосновать, что таймер через пять минут работы "закушает память"? |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	|  |