Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SysTray просто и понятно [D6, WinXP]


Страницы:   1 2

InfMag ©   (2004-11-21 08:07:00) 

Люди, объясните как поместить свою прогу в систрей и при правом и левом клике выводить какой-нить popup... И еще как убрать ее из.., ну этих, блин, где она обычно должна появляться.


Quest   (2004-11-24 10:57:00) [1]

>>_Дельфин_   (22.11.04 22:34) [22]
>>Боюсь показаться тупым, вообще-то у меня все работает, если бы >>не одно ма-аленькое но: ИКОНКА В ТРЕЕ У МЕНЯ НЕВИДИМАЯ!

положи на форму TImage и помести в него иконку, а потом вызывай

NID.hIcon  := Image1.Picture.Icon.Handle;


Piter   (2004-11-23 23:59:00) [2]

Alexander Panov ©   (23.11.04 23:30) [29]

понял. Спасибо!


Alexander Panov   (2004-11-23 23:30:00) [3]

Piter ©   (23.11.04 23:26) [28]

А ты попробуй нажать правую кнопку, но не наводить курсором на меню, а кликнуть на панель задач, например, и увидишь.


Piter   (2004-11-23 23:26:00) [4]

_Дельфин_   (23.11.04 19:00) [25]
Собственно, вся процедура, как у вас:


точно как у меня? ICON1 написано БОЛЬШИМИ буквами?

Alexander Panov ©   (23.11.04 20:52) [27]
SetForegroundWindow(Application.MainForm.Handle)


это еще зачем?


Alexander Panov   (2004-11-23 20:52:00) [5]

>Piter ©   (21.11.04 11:10) [11]
Поправь вот этот код таким образом:

procedure TForm1.IconMessage(var Msg: TMessage);
var
Pt: TPoint;
begin
case Msg.lParam of
WM_LBUTTONDOWN : showmessage('По иконке кликнули левой кнопкой мыши!');
WM_RBUTTONDOWN :
  begin
    GetCursorPos (Pt);
    SetForegroundWindow(Application.MainForm.Handle);
    PopupMenu1.Popup (Pt.x, Pt.y);
  end;
end;


abc   (2004-11-23 19:29:00) [6]

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Icon.Handle:=LoadIcon(HINSTANCE,'ICON1');
end;
проверь будет ли ICON1 показыватся в Image1
видимо ICON1 не извлекается из ресурса


_Дельфин_   (2004-11-23 19:00:00) [7]

Piter (22.11.04 23:38) [24]

Как вы и объясняли -
сначала в Image Editor сделал прямо с ваших объяснений иконку, затем добавил в файл unit'а строчку
{$R icon.RES}, затем при создании иконки в трее у меня была и такая строчка:  
NID.hIcon := LoadIcon(HINSTANCE,'ICON1');

Собственно, вся процедура, как у вас:

procedure TForm1.Button1Click(Sender: TObject);
begin
NID.uID :=0;
NID.Wnd := Handle;
NID.uCallbackMessage :=WM_USER;
NID.hIcon := LoadIcon(HINSTANCE,'ICON1');
NID.szTip := 'Моя иконка';
NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
NID.cbSize :=sizeof(NID);
Shell_NotifyIcon(NIM_ADD,@NID);
end;


Я и при создании формы эту процедуру писал, и при нажатии кнопки  -не работает!


Piter   (2004-11-22 23:38:00) [8]

_Дельфин_   (22.11.04 22:34) [22]

покажи как грузишь hIcon


Piter   (2004-11-22 23:37:00) [9]

_Дельфин_   (22.11.04 22:34) [22]

потому что неправильно грузишь иконку...


_Дельфин_   (2004-11-22 22:34:00) [10]

Боюсь показаться тупым, вообще-то у меня все работает, если бы не одно ма-аленькое но: ИКОНКА В ТРЕЕ У МЕНЯ НЕВИДИМАЯ! Как мне с этим бороться? Я и менял настройки разрешения и цветности иконки, как отдельного файла, и рисовал специально в Borland Image Editor'е - не помогает! Объясните проблему!


GuAV   (2004-11-21 19:49:00) [11]

KilkennyCat ©   (21.11.04 17:50) [18]

ИМХО неверно. Какие ресурсы освобождает Outlook Express при рисовании там уведомления чо пришла почта ?


Piter   (2004-11-21 18:52:00) [12]

KilkennyCat ©   (21.11.04 17:50) [18]
я имею ввиду, что некотырые запуздыривают приложение целиком, и оно продолжает жрать ресурсы, хотя ему уже нужно совершенно не то количество


не понял, что ты хотел сказать. Начиная от "запуздыривают целиком" - это как? Можно запуздыривать по частям?


abc   (2004-11-21 18:38:00) [13]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1100592227&n=5


KilkennyCat   (2004-11-21 17:50:00) [14]


> Piter ©   (21.11.04 11:10) [10]


добавь еще о стиле программирования таких штук и цены тебе не будет :) я имею ввиду, что некотырые запуздыривают приложение целиком, и оно продолжает жрать ресурсы, хотя ему уже нужно совершенно не то количество...


Piter   (2004-11-21 17:46:00) [15]

А что объяснять то? Насчет установки хука - почитай в интернете, на этом сайте даже статья есть по hook'ам.

Идея в том, что при посылке сообщения, которое получено при помощи:

RegisterWindowMessage('TaskbarCreated')

любая программа по идее должна восстановить свою иконку в SysTray (например, такое сообщение рассылается окнам при перезагрузке Explorer, чтобы они заново свои иконки сделали).
Так вот, рассылая данное сообщение вручную ты добьешься, что приложения начнут восстанавливать свои иконки, то есть использовать функцию Shell_NotifyIcon. А если ты до этого установишь хук на данный вызов функции, то сможешь узнать передаваемые параметры в эту функцию. Таким образом ты сможешь узнать Handle окна и Id иконки.

А теперь я вот что скажу - ты вероятно нашел где-то в реестре ключ, отвечающий за установку этого громкоговорителя (ты кстати уверен, что в разных windows этот путь одинаковый?). Ты бы лучше подумал на тот счет как заставить windows перечитать параметры из реестра. По-моему, был какой-то вызов какой-то функции, которая приводила к этому. Но я не помню какая...


Alexey Romanskiy   (2004-11-21 16:43:00) [16]


> Piter ©   (21.11.04 15:06) [15]


> поставь хук на Shell_NotifyIcon, после чего разошли Broadcast
> с сообщением: RegisterWindowMessage('TaskbarCreated')
Объясни немного поподробней плиз.

> Но только зачем тебе удалять регулировку громкости? Что
> за программа такая интересная...
Это длинная история, а если коротко, то мне необходимо при инсталяции своей проги отключить стандартный звуковой регулятор и поставить в автозагрузку свой.

> Вообще-то в Панели Управления, в "Звук и мультимедиа" есть
> флажок "Регулятор громкости на панели задач". Просто сними
> этот флажок и все.
Это все понятно, только мне это из проги делать надо, и снимать этот флажок я уже научился, и после перезагрузки регулятор громкости больше не грузится, но мне нужно обходиться без перезагрузки, и отключить иконку в ручную.
Так, что объясни по подробней пожалуйста.


Piter   (2004-11-21 15:06:00) [17]

Alexey Romanskiy   (21.11.04 14:51) [14]
А если я хочу удалить из трея иконку регулятора громкости, то где мне взять все необходимые параметры NotifyIconData, а именно Handle окна и иконки?


поставь хук на Shell_NotifyIcon, после чего разошли Broadcast с сообщением:

RegisterWindowMessage('TaskbarCreated')

Но только зачем тебе удалять регулировку громкости? Что за программа такая интересная...

Вообще-то в Панели Управления, в "Звук и мультимедиа" есть флажок "Регулятор громкости на панели задач". Просто сними этот флажок и все.


Alexey Romanskiy   (2004-11-21 14:51:00) [18]

А у меня все-таки возникает вопрос.
Если создавать или удалять иконку своей программы, то здесь все понятно. А если я хочу удалить из трея иконку регулятора громкости, то где мне взять все необходимые параметры NotifyIconData, а именно Handle окна и иконки?


DrPass   (2004-11-21 13:56:00) [19]

Он уже статью по этой теме написал. Кстати, рекомендую сделать ее стартовой страницей сайта. А за вопрос, содержащий слово "Трей" или "Tray" автоматически удалять пользователя, и рассылать его адрес во все крупные спаммерские базы


Кириешки   (2004-11-21 11:46:00) [20]

Странно ...

С чего это сдесь стали понятно и очень подробно объяснять? ...
Обычно ограничивались коротким постом в 10-15 строк максимум.
А Piter приятно удивил ...
:)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо