Pop-up меню при клике на иконке в трее

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
pancer
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.01.2008 (Вт) 20:57

Pop-up меню при клике на иконке в трее

Сообщение pancer » 26.01.2008 (Сб) 21:33

Проблема: меню при клике по иконке нормально создаётся, но его невозможно убрать с экрана, пока не выберешь один из его пунктов. В общем, как сделать, чтобы при клике мышкой на любом месте рабочего стола меню исчезало?
Вот как я его (меню) делаю (API-декларации опускаем):
Код: Выделить всё

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim menuId As Long, menuText As String
Dim pos As POINTAPI

If (Y = 0) Then
    Select Case X
    Case 517 * Screen.TwipsPerPixelX  'right click       
       
        hMenu = CreatePopupMenu 'создаем пустое всплывающее меню
        AppendMenu hMenu, MF_STRING, 1100, "Первый пункт"
        AppendMenu hMenu, MF_STRING, 1200, "Второй пункт"
        AppendMenu hMenu, MF_SEPARATOR, 1300, ByVal 0&
        AppendMenu hMenu, MF_STRING, 1400, "Четвертый пункт"
        AppendMenu hMenu, MF_STRING, 1500, "Пятый пункт"
        AppendMenu hMenu, MF_SEPARATOR, 1600, ByVal 0&
        AppendMenu hMenu, MF_STRING, 1700, "Седьмой пункт"
       
        GetCursorPos pos
        menuId = TrackPopupMenu(hMenu, TPM_RETURNCMD, pos.X, pos.Y, 0, Me.hwnd, ByVal 0&)
        Select Case menuId
            Case 1100
                msgbox "Первый пункт"
            Case 1200
                msgbox "Второй пункт"
            Case 1400
                msgbox "Четвёртый пункт"
            Case 1500
                msgbox "Пятый пункт"
            Case 1700
                msgbox "Седьмой пункт"
        End Select

    End Select
End If
End Sub

P.S. Просьба к googl'у не отсылать, там я ничего не нашёл.
Код: Выделить всё

homeworld
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 07.12.2006 (Чт) 13:17

Сообщение homeworld » 26.01.2008 (Сб) 21:51

используй TryIcon :!: :!: :!: :!:

pancer
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.01.2008 (Вт) 20:57

Сообщение pancer » 26.01.2008 (Сб) 22:11

Помедленнее, я записываю... :-)
Если можно, какой нибудь пример в пару строк...

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 27.01.2008 (Вс) 0:13

Это очень распространенный глюк, описанный в МСДНе. Бороться так:
Код: Выделить всё
SetForegroundWindows Me
PopUpMEnu Popm, Flags, x,y,DefMenu
PostMessage Me, wm_null,0,0
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 27.01.2008 (Вс) 5:02

JohnK - все правильно, но я бы еще добавил одну строчку

Код: Выделить всё
SetForegroundWindows Me.hwnd
GetCursorPos pos   
TrackPopupMenu hMenu, TPM_RETURNCMD, pos.X, pos.Y, 0, Me.hwnd, ByVal 0&
PostMessage Me.hwnd , wm_null,0,0

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Сообщение BION » 27.01.2008 (Вс) 10:42

Вот класс с которым я работаю уже давно, все работает как часы... китайские :) шучу.

Примерчик с классом
ВОт только с MDI формой подглючивает.
Вложения
tray.rar
Version 0.90 Beta * Copyright (©) А.Щербаков * May 17, 2000
(4.1 Кб) Скачиваний: 69

pancer
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.01.2008 (Вт) 20:57

Сообщение pancer » 27.01.2008 (Вс) 11:17

Спасибо, помогло.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 28.01.2008 (Пн) 3:24

jangle писал(а):JohnK - все правильно, но я бы еще добавил одну строчку

Код: Выделить всё
SetForegroundWindows Me.hwnd
GetCursorPos pos   
TrackPopupMenu hMenu, TPM_RETURNCMD, pos.X, pos.Y, 0, Me.hwnd, ByVal 0&
PostMessage Me.hwnd , wm_null,0,0


И ещё одну:
Код: Выделить всё
ReleaseCapture


После выбора нажатого батона.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 121

    TopList