Форум: "Система";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизHint в System Tray Найти похожие ветки
← →
Kr_Alex (2002-06-22 13:26) [0]Как узнать, что юзер задержал мышку над моей иконкой в System Tray (в смысле пора hint показать)? Но показать не hint а окно программы.
← →
dennisius (2002-06-22 22:51) [1]
> 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;
Вот и всё пашет подо всё .
← →
Diamond Cat (2002-06-23 01:01) [2]все верно только вопрос немного не про то, для определения что мышь просто находиться над твоей иконкой надо ловить сообщение wm_mousemove
← →
Kr_Alex (2002-06-23 15:19) [3]
> dennisius
Спасибо!
← →
Kr_Alex (2002-06-23 17:03) [4]И ещё один вопросик: какие сообщения нужно ловить, чтобы узнать что мышка вошла и вышла из области иконки? (помоему что-то типа WM_MOUSEENTER И WM_MOUSEEXIT)
← →
Almaz (2002-06-23 23:24) [5]
> Kr_Alex © (23.06.02 17:03)
> И ещё один вопросик: какие сообщения нужно ловить, чтобы
> узнать что мышка вошла и вышла из области иконки? (помоему
> что-то типа WM_MOUSEENTER И WM_MOUSEEXIT)
Таких сообщений не существует. Есть только WM_MOUSEMOVE, которое посылается при движении курсора мышки над иконкой.
Удачи.
← →
Kr_Alex (2002-06-24 23:01) [6]Так что, нельзя узнать когда мышка вошла в область иконки? А как это Explorer делает?
Он ведь узнаёт об этом и показывает hint.
← →
Almaz (2002-06-25 01:54) [7]
> Kr_Alex © (24.06.02 23:01)
> Так что, нельзя узнать когда мышка вошла в область иконки?
> А как это Explorer делает?
> Он ведь узнаёт об этом и показывает hint.
Как это делает Explorer один лишь Microsoft знает :))
А сделать это самому можно так:
1. При получении вашим окном сообщения WM_MOUSEMOVE, вы вызываете функцию SetCapture (при этом все "мышиные" сообщения будут перенаправляться вашему окну) и запускаете таймер.
2. После этого обрабатываете все сообщения WM_MOUSEMOVE, получаемые вашим окном при этом определяете, находится ли курсор над вашей иконкой или нет (для простоты можно определять не отошла ли мышка далее 8 пикселей от первоначального состояния). Если мышка отошла от вашей иконки, то вызывайте ReleaseCapture и сбрасываете таймер.
3. Если таймер сработал - показываете Hint, сбрасываете таймер и вызываете ReleaseCapture.
Удачи.
← →
dennisius (2002-06-27 14:27) [8]Kr_Alex
А стоет ли ето делать пользователь забодается
1000 раз на день случайно попадаю на эту иконку и ты сам её проклинать будеш но если хочеш :
if Message.LParam=WM_WM_MOUSEMOVE then
Form1.Visible:=true;
← →
Ricks (2002-06-28 01:22) [9]насчет WM_MOUSEENTER и др.
На самом деле оно называется CM_MOUSEENTER и CM_MOUSELEAVE, если конечно это поможет ;-)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c