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

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

Hint в System Tray [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Kr_Alex ©   (2002-06-22 13:26:00) 

Как узнать, что юзер задержал мышку над моей иконкой в System Tray (в смысле пора hint показать)? Но показать не hint а окно программы.


Ricks   (2002-06-28 01:22:00) [1]

насчет WM_MOUSEENTER и др.
На самом деле оно называется CM_MOUSEENTER и CM_MOUSELEAVE, если конечно это поможет ;-)


dennisius   (2002-06-27 14:27:00) [2]

Kr_Alex
А стоет ли ето делать пользователь забодается
1000 раз на день случайно попадаю на эту иконку и ты сам её проклинать будеш но если хочеш :
if Message.LParam=WM_WM_MOUSEMOVE then
Form1.Visible:=true;


Almaz   (2002-06-25 01:54:00) [3]


> Kr_Alex © (24.06.02 23:01)
> Так что, нельзя узнать когда мышка вошла в область иконки?
> А как это Explorer делает?
> Он ведь узнаёт об этом и показывает hint.

Как это делает Explorer один лишь Microsoft знает :))
А сделать это самому можно так:
1. При получении вашим окном сообщения WM_MOUSEMOVE, вы вызываете функцию SetCapture (при этом все "мышиные" сообщения будут перенаправляться вашему окну) и запускаете таймер.
2. После этого обрабатываете все сообщения WM_MOUSEMOVE, получаемые вашим окном при этом определяете, находится ли курсор над вашей иконкой или нет (для простоты можно определять не отошла ли мышка далее 8 пикселей от первоначального состояния). Если мышка отошла от вашей иконки, то вызывайте ReleaseCapture и сбрасываете таймер.
3. Если таймер сработал - показываете Hint, сбрасываете таймер и вызываете ReleaseCapture.

Удачи.


Kr_Alex   (2002-06-24 23:01:00) [4]

Так что, нельзя узнать когда мышка вошла в область иконки? А как это Explorer делает?
Он ведь узнаёт об этом и показывает hint.


Almaz   (2002-06-23 23:24:00) [5]


> Kr_Alex © (23.06.02 17:03)
> И ещё один вопросик: какие сообщения нужно ловить, чтобы
> узнать что мышка вошла и вышла из области иконки? (помоему
> что-то типа WM_MOUSEENTER И WM_MOUSEEXIT)

Таких сообщений не существует. Есть только WM_MOUSEMOVE, которое посылается при движении курсора мышки над иконкой.

Удачи.


Kr_Alex   (2002-06-23 17:03:00) [6]

И ещё один вопросик: какие сообщения нужно ловить, чтобы узнать что мышка вошла и вышла из области иконки? (помоему что-то типа WM_MOUSEENTER И WM_MOUSEEXIT)


Kr_Alex   (2002-06-23 15:19:00) [7]


> dennisius

Спасибо!


Diamond Cat   (2002-06-23 01:01:00) [8]

все верно только вопрос немного не про то, для определения что мышь просто находиться над твоей иконкой надо ловить сообщение wm_mousemove


dennisius   (2002-06-22 22:51:00) [9]


> Kr_Alex

Одно из полей структуры TNotifyIconData : uCallBackMessage
то бишь это идентификатор события от иконки
Во время создания :uCallBackMessage:=CallBackIconMessage;

До этого в констант сразу после юзезь :
CallBackIconMessage=wm_user;

Объявление процедуры обработчика
procedure IconOnClick(var Message: TMessage); message CallBackIconMessage;

Сама процедура ,советую тебе показывать окно при двойном щелчке
procedure TForm1.IconOnClick(var Message: TMessage);
begin
if Message.LParam=WM_LBUTTONDBLCLK then
Form1.Visible:=true;
end;
Вот и всё пашет подо всё .


Наверх

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