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

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

Иконка в SysTray не создавая своих окон. [D7, WinXP]


Страницы:   1 2 3

Ascan ©   (2005-04-11 14:36:00) 

Если в моей программе Object Pascalнет ниодного окна, то могу ли кинуть иконку в SysTray и обрабатывать по не события?
Иконку кидать получается, но при наведении на нее мышкой иконка пропадает. Возможно, идет проверка на существование окна, описанное при вызове Shell_NotifyIcon...


Ascan   (2005-04-11 15:48:00) [41]

Eraser,
>> предлагаешь создать окно только затем, чтобы Explorer (или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?
> Именно! А почему нет?...

Не эффективно, если без этого можно обойтись.

> Если не секрет, что за паредавал в поле hWnd структуры NOTIFYICONDATA, при вызове ф-ии Shell_NotifyIcon с первым параметром равным NIM_ADD?

То же самое что и при:
RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL
и при:
GetMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax: UINT): BOOL;

В данный момент hWnd = 0, пробывал HInstance, результат тотже. В результате чего я и пришел к выводу, что для регистрации иконки можно указывать что угодно. Получения событий от Горячей клавишинужен тот же hWnd, а для SysTray, этот hWndдолжен быть еще и Существующим Окном.


Digitman   (2005-04-11 15:34:00) [42]


> Что интересно, Регистрация горячих клавишь в системе тоже
> требует Handle окна


не выдумывай, вовсе не требует.

вот цитата :

hWnd

Identifies the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.


Eraser   (2005-04-11 15:33:00) [43]

Ascan
предлагаешь создать окно только затем, чтобы Explorer (или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?


Именно! А почему нет?...


Eraser   (2005-04-11 15:32:00) [44]

Ascan
А события я именно так и пробывал читать (Get/PeekMessage). Только вот они не доходят.


Она не доходят потому что [3]!

Если не секрет, что за паредавал в поле hWnd структуры NOTIFYICONDATA, при вызове ф-ии Shell_NotifyIcon с первым параметром равным NIM_ADD?


Ascan   (2005-04-11 15:28:00) [45]

Eraser, предлагаешь создать окно только затем, чтобы Explorer(или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?


Ascan   (2005-04-11 15:24:00) [46]

Eraser, нету. Если у меня нет окон, то зачем мне подключать Forms?
А события я именно так и пробывал читать ( Get/PeekMessage). Только вот они не доходят. Видимо проверка на существование окна происходит раньше.

Что интересно, Регистрация горячих клавишь в системе тоже требует Handleокна, но здесь таких сложностей не возникло, GetMessageвсе подхватил. А вот с SysTray'ем такая беда...


Eraser   (2005-04-11 15:16:00) [47]

Digitman ©
HWND hWnd;


Ферштейн.

Ascan

Без окон всё таки не обойтись... не пойму, а что мешает создать окно?


Eraser   (2005-04-11 15:15:00) [48]

Digitman ©
HWND hWnd;


Ферштейн.

Ascan

Модуль Forms есть в uses'e?


Digitman   (2005-04-11 15:00:00) [49]


> Eraser ©   (11.04.05 14:50) [2]


а можно еще попробовать хуков всяко-разных понаставить ... можно драйвер написать ... мно-о-ого еще чего можно попробовать !

но проще почитать справку :

typedef struct _NOTIFYICONDATA { // nid  
   DWORD cbSize;
    HWND hWnd;
   UINT uID;
   UINT uFlags;
   UINT uCallbackMessage;
   HICON hIcon;
   char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;


Members

...

hWnd

Handle of the window that receives notification messages associated with an icon in the taskbar status area.


Eraser   (2005-04-11 14:50:00) [50]

Ascan

Попробуй создать отдельный поток и там перехватывать нужные сообщения ф-ей Get/PeekMessage.


Digitman   (2005-04-11 14:42:00) [51]


> Если в моей программе Object Pascal нет ниодного окна, то
> могу ли кинуть иконку в SysTray и обрабатывать по не события?


обработкой событий иконки занимается оконная ф-ция некоего окна
нет окна - нет и обработки


Страницы:   1 2 3

Наверх

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