Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / При использовании Shell_NotifyIcon активное окно теряет фокус / 9 сообщений из 9, страница 1 из 1
05.06.2004, 21:17
    #32549721
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
Данный код добавляет значок в трее (п ример взят из API-Guide) .
При нажатии левой кнопки - сообщение , правой - выход .
Если просто навести мышкой на значок , то активное окно теряет фокус . Почему?
Спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
\'Module
Option\xa0Explicit

Public\xa0Type\xa0NOTIFYICONDATA
\xa0\xa0\xa0\xa0cbSize\xa0As\xa0Long
\xa0\xa0\xa0\xa0hWnd\xa0As\xa0Long
\xa0\xa0\xa0\xa0uId\xa0As\xa0Long
\xa0\xa0\xa0\xa0uFlags\xa0As\xa0Long
\xa0\xa0\xa0\xa0ucallbackMessage\xa0As\xa0Long
\xa0\xa0\xa0\xa0hIcon\xa0As\xa0Long
\xa0\xa0\xa0\xa0szTip\xa0As\xa0String\xa0*\xa064
End\xa0Type

Public\xa0Const\xa0NIM_ADD\xa0=\xa0&H0
Public\xa0Const\xa0NIM_MODIFY\xa0=\xa0&H1
Public\xa0Const\xa0NIM_DELETE\xa0=\xa0&H2
Public\xa0Const\xa0NIF_MESSAGE\xa0=\xa0&H1
Public\xa0Const\xa0NIF_ICON\xa0=\xa0&H2
Public\xa0Const\xa0NIF_TIP\xa0=\xa0&H4

Public\xa0Const\xa0WM_LBUTTONDBLCLK\xa0=\xa0&H203
Public\xa0Const\xa0WM_LBUTTONDOWN\xa0=\xa0&H201
Public\xa0Const\xa0WM_RBUTTONUP\xa0=\xa0&H205

Public\xa0Declare\xa0Function\xa0Shell_NotifyIcon\xa0Lib\xa0"shell32"\xa0Alias\xa0"Shell_NotifyIconA"\xa0(ByVal\xa0dwMessage\xa0As\xa0Long,\xa0pnid\xa0As\xa0NOTIFYICONDATA)\xa0As\xa0Boolean
\'Module


Как отформатирован этот код?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
\'Form
Option\xa0Explicit

Private\xa0TrayI\xa0As\xa0NOTIFYICONDATA

Private\xa0Sub\xa0Form_Load()
\xa0\xa0\xa0\xa0LoadTray
\xa0\xa0\xa0\xa0Me.Hide
End\xa0Sub

Private\xa0Sub\xa0Form_Unload(Cancel\xa0As\xa0Integer)
\xa0\xa0\xa0\xa0LoadTray\xa0False
End\xa0Sub

Private\xa0Sub\xa0Picture1_MouseDown(Button\xa0As\xa0Integer,\xa0Shift\xa0As\xa0Integer,\xa0X\xa0As\xa0Single,\xa0Y\xa0As\xa0Single)
\xa0\xa0\xa0\xa0Dim\xa0Msg
\xa0\xa0\xa0\xa0
\xa0\xa0\xa0\xa0
\xa0\xa0\xa0\xa0
\xa0\xa0\xa0\xa0Msg\xa0=\xa0X\xa0/\xa0Screen.TwipsPerPixelX
\xa0\xa0\xa0\xa0
\xa0\xa0\xa0\xa0If\xa0Msg\xa0=\xa0WM_LBUTTONDOWN\xa0Then
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0MsgBox\xa0Me.Caption
\xa0\xa0\xa0\xa0ElseIf\xa0Msg\xa0=\xa0WM_RBUTTONUP\xa0Then
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Unload\xa0Me
\xa0\xa0\xa0\xa0End\xa0If
End\xa0Sub

Private\xa0Sub\xa0LoadTray(Optional\xa0blLoad\xa0As\xa0Boolean\xa0=\xa0True)
\xa0\xa0\xa0\xa0TrayI.cbSize\xa0=\xa0Len(TrayI)
\xa0\xa0\xa0\xa0TrayI.hWnd\xa0=\xa0Picture1.hWnd
\xa0\xa0\xa0\xa0TrayI.uId\xa0=\xa01&
\xa0\xa0\xa0\xa0
\xa0\xa0\xa0\xa0If\xa0blLoad\xa0Then
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0TrayI.uFlags\xa0=\xa0NIF_ICON\xa0Or\xa0NIF_TIP\xa0Or\xa0NIF_MESSAGE
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0TrayI.ucallbackMessage\xa0=\xa0WM_LBUTTONDOWN
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0TrayI.hIcon\xa0=\xa0Me.Icon.Handle
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0TrayI.szTip\xa0=\xa0Me.Caption\xa0&\xa0Chr$(0)
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Shell_NotifyIcon\xa0NIM_ADD,\xa0TrayI
\xa0\xa0\xa0\xa0Else
\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Shell_NotifyIcon\xa0NIM_DELETE,\xa0TrayI
\xa0\xa0\xa0\xa0End\xa0If
End\xa0Sub
\'Form


Как отформатирован этот код?
...
Рейтинг: 0 / 0
06.06.2004, 17:38
    #32549958
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
Скорее всего, необходимо выполнить нижеследующий алгоритм. Не поможет - отпиши.

1) ищешь на рабочем столе кнопку Пуск (Start - в других языках не знаю, как зовут) . Чаще всего расположена слева внизу.
2) Жмешь Пуск-Настройка-Панель управления.

В в открывшемся наборе ищешь элемент Мышь. Жмакаешь на нем.
Первая закладка (Кнопки мыши), средняя зона - Число щелчком для открытия или выделения файлов и папок.
Действие – Переставить опшонбаттон в НИЖНЮЮ ПОЗИЦИЮ.
...
Рейтинг: 0 / 0
07.06.2004, 20:36
    #32551488
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
Да, речь ,думаю, идёт не о настройках Windows , а о верном использовании функции Shell_NotifyIcon . Что-то в моём примере не того...
Другие мнения?
...
Рейтинг: 0 / 0
08.06.2004, 00:40
    #32551587
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
ок - как всегда - "не читал"
начнем с начала

автортеряет фокус - это как перевести с русского на русский?

окно как будто скрыто - при чем тут фокус - что оно теряет?
...
Рейтинг: 0 / 0
09.06.2004, 01:10
    #32553304
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
object.SetFocus (переводи фокус с текущего окна, на object)
вот подобное и происходит у меня при наведении на значок в трее. "фокус" исчезает...
...
Рейтинг: 0 / 0
09.06.2004, 02:48
    #32553316
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
говоря откровенно, я не сумел воспроизвести ситуацию "потери фокуса при наведении на икону в трее" ни при каких настройках мыши.

ПРИШЛОСЬ разглядывать Ваш текст. :))

Если же говорить о том, что в Вашем коде "не так", то:

MSDN учит, что перехват событий мыши от иконы в трее производится в событии MouseMove для формы. то есть в процедуре Form_MouseMove.(все сидел - пытался "потерю фокуса" узреть - никаких потерь фокуса при этом не происходит - нету) У Вас же в событии для контрола Picture1.
То есть я даже могу предположить, что "оно работает" (типа контрол на всю форму - проверять лениво) , но если так, то как раз смотрим обязательно в рекомендацию №1 (параметры выделения мышью) и приходим к выводу, что в таком разе производится попытка передачи фокуса контролу Picture1.

Мораль - MouseMove должен быть для формы. В примере, конечно, не того. А виндовс при том.
))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.05.2009, 10:01
    #35966339
EmilRegis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
А подскажите как в vb называется событие сворачивания(Minimize)?
я пробовал Form_Minimize, вроде не подходит
...
Рейтинг: 0 / 0
04.05.2009, 10:02
    #35966343
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
Нужно в Form_resize проверять Form.WindowState.
...
Рейтинг: 0 / 0
04.05.2009, 10:05
    #35966351
EmilRegis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании Shell_NotifyIcon активное окно теряет фокус
ага понял,спасибо
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / При использовании Shell_NotifyIcon активное окно теряет фокус / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]