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 Кб - загружено 1067 раз.)
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 12-02-2010 03:51 » |
|
в трее не бывает анимации - там надо по таймеру (или тактируя по иному) заменять картинку
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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, ты сможешь это обосновать, что таймер через пять минут работы "закушает память"?
|
|
|
Записан
|
|
|
|
|