powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / При использовании Shell_NotifyIcon активное окно теряет фокус
9 сообщений из 9, страница 1 из 1
При использовании Shell_NotifyIcon активное окно теряет фокус
    #32549721
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данный код добавляет значок в трее (п ример взят из 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
При использовании Shell_NotifyIcon активное окно теряет фокус
    #32549958
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего, необходимо выполнить нижеследующий алгоритм. Не поможет - отпиши.

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

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

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

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

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

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

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

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


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