Тема: Всплывающее меню
Всплывающее меню по нажатию правой клавиши мыши на окно. Кто-нибудь делал это?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Всплывающее меню
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Всплывающее меню по нажатию правой клавиши мыши на окно. Кто-нибудь делал это?
Интересует всплывающее меню при нажатии на форму или элемент формы (на любой из контролов ну или на listbox например)
Я приводил как то здесь код popup на API, если есть опыт работы с API то разберетесь код длинноват и много нужно самому ручками делать. Есть второй вариант которым я тоже пользовался на VB, я из стандартного меню формы делал popup, с VB и ACAD сейчас не работаю так что пример показать не могу но сводилось это все к одной строке что то типо
popup MenuObject.Chield
Я думал, что интересует меню ACAD по правой клавише.
> [Re:] SmeL
Просматривал приведённый первый вариант на API, довольно муторно, для простой програмки проще и быстрей второй вариант, через форму.
> Dron
Я тоже делал через форму, которая имела форму меню и появлялась под указателем мыши по правому клику и на которой были в виде элементов меню размещены лэйблы. Перемещение указателя над лэблами изменяло их цвет. А клик по "выделенному" лэйблу выполнял команду.
> Artem
Решение:
http://discussion.autodesk.com/thread.j … ID=5718891
~'J'~
Вот такая батва помогла мне когда-то
Const MF_CHECKED = &H8& Const MF_APPEND = &H100& Const TPM_LEFTALIGN = &H0& Const MF_DISABLED = &H2& Const MF_GRAYED = &H1& Const MF_SEPARATOR = &H800& Const MF_STRING = &H0& Private Type PointAPI X As Long Y As Long End Type Private Declare Function CreatePopupMenu Lib "user32" () As Long Private Declare Function TrackPopupMenu Lib "user32" _ (ByVal hMenu As Long, _ ByVal wFlags As Long, _ ByVal X As Long, _ ByVal Y As Long, _ ByVal nReserved As Long, _ ByVal hwnd As Long, _ ByVal lprc As Any) As Long Private Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Private Declare Function AppendMenu Lib "user32" _ Alias "AppendMenuA" _ (ByVal hMenu As Long, _ ByVal wFlags As Long, _ ByVal wIDNewItem As Long, _ ByVal lpNewItem As Any) As Long Private Declare Function DestroyMenu Lib "user32" _ (ByVal hMenu As Long) As Long Private Declare Function GetCursorPos Lib "user32" _ (lpPoint As PointAPI) As Long Private Declare Function GetActiveWindow Lib "user32" () As Boolean Dim hMenu As Long Private Sub Form_Load() 'Создаём пустое меню hMenu = CreatePopupMenu() 'Добавляем пункты в меню AppendMenu hMenu, MF_STRING, 1001, "Fuck you !" AppendMenu hMenu, MF_STRING, 1002, "Fuck you !" AppendMenu hMenu, MF_STRING, 1003, "Fuck you !" AppendMenu hMenu, MF_SEPARATOR, ByVal 0&, ByVal 0& AppendMenu hMenu, MF_STRING, 1004, "Fuck you !" 'AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, ByVal 0&, "Test" 'AppendMenu hMenu, MF_CHECKED, ByVal 0&, "TrackPopupMenu" End Sub Private Sub Form_Unload(Cancel As Integer) DestroyMenu hMenu End Sub Private Sub UserForm_Activate() Form_Load End Sub Private Sub UserForm_Deactivate() Form_Unload End Sub Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim Pt As PointAPI Dim sMenu As Long 'Получаем позицию курсора мыши GetCursorPos Pt 'Показываем меню If Button = 2 Then sMenu = TrackPopupMenu(hMenu, 256, Pt.X, Pt.Y, _ 0, GetActiveWindow(), ByVal 0&) Select Case sMenu Case 1001 MsgBox ("Fuck you 1 раз") Case 1002 MsgBox ("Fuck you 2 раза") Case 1003 MsgBox ("Fuck you 3 раза") Case 1004 MsgBox ("Fuck you через сепаратор") End Select End If End Sub
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Всплывающее меню
Форум работает на PunBB, при поддержке Informer Technologies, Inc