Версия AutoIt: 3.
AutoIt v3.3.14.2
Описание:
Всем привет
Хочу попробовать добавить 1 кнопку с выпадающим списком к 2-ум уже существующим.
Добавление вроде нормально прошло а вот выпадающего списка нет. Проблема только кнопки №3
И в чём проблема? :stars:
Примечания:
AutoIt v3.3.14.2
Описание:
Всем привет
Хочу попробовать добавить 1 кнопку с выпадающим списком к 2-ум уже существующим.
Добавление вроде нормально прошло а вот выпадающего списка нет. Проблема только кнопки №3
И в чём проблема? :stars:
Примечания:
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
Local $hGui, $OptionsBtn, $OptionsDummy, $OptionsContext, $OptionsCommon, $OptionsFile, $msg
Local $OptionsExit, $HelpBtn, $HelpDummy, $HelpContext, $HelpWWW, $HelpAbout
Local $TriBtn, $TriDummy, $TriContext, $TriWWW, $TriAbout
$hGui = GUICreate("Выбор вариантов: 3 категории", 550, 40)
$OptionsBtn = GUICtrlCreateButton("&От 1 до 10", 10, 10, 90, 20, $BS_FLAT) ; Это первая - кнопка выпадающего списка
; Сначала создан элемент - пустышка (Dummy) и контекстное меню для него, которое будет пристроено к кнопке "От 1 до 10" или Options
$OptionsDummy = GUICtrlCreateDummy()
$OptionsContext = GUICtrlCreateContextMenu($OptionsDummy)
$1variant_vibora = GUICtrlCreateMenuItem("1-й вариант ", $OptionsContext)
GUICtrlCreateMenuItem("", $OptionsContext) ; разделительная линия
$2variant_vibora = GUICtrlCreateMenuItem("2-й вариант", $OptionsContext)
GUICtrlCreateMenuItem("", $OptionsContext); разделительная линия
$HelpBtn = GUICtrlCreateButton("&От 11 до 20", 110, 10, 90, 20, $BS_FLAT) ; Это вторая - кнопка выпадающего списка
; Создан элемент - пустышка и контекстное меню, которое будет пристроено к кнопке "От 11 до 20" или Help
$HelpDummy = GUICtrlCreateDummy()
$HelpContext = GUICtrlCreateContextMenu($HelpDummy)
$11variant_vibora = GUICtrlCreateMenuItem("11-ый вариант", $HelpContext)
GUICtrlCreateMenuItem("", $HelpContext)
$12variant_vibora = GUICtrlCreateMenuItem("12-ый вариант", $HelpContext)
GUICtrlCreateMenuItem("", $HelpContext)
;~ третья кнопка
$TriBtn = GUICtrlCreateButton("&От 21 до 30", 210, 10, 90, 20, $BS_FLAT) ; Это вторая - кнопка выпадающего списка
; Создан элемент - пустышка и контекстное меню, которое будет пристроено к кнопке "От 21 до 30", или Tri
$TriDummy = GUICtrlCreateDummy()
$TriContext = GUICtrlCreateContextMenu($TriDummy)
$31variant_vibora = GUICtrlCreateMenuItem("31-ый вариант", $TriContext)
GUICtrlCreateMenuItem("", $TriContext)
$32variant_vibora = GUICtrlCreateMenuItem("32-ый вариант", $TriContext)
GUICtrlCreateMenuItem("", $TriContext)
GUISetState()
While 1 ; Старт Цикла
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $OptionsBtn
ShowMenu($hGui, $msg, $OptionsContext)
Case $HelpBtn
ShowMenu($hGui, $msg, $HelpContext)
Case $TriDummy ; Создаём новое выпадающее меню - для третьей кнопки
ShowMenu($hGui, $msg, $TriContext)
Case $1variant_vibora ; Мои действия
MsgBox(262208,"Сообщение","Выбран вариант = 1", 2)
ExitLoop
Case $2variant_vibora ; Мои действия
MsgBox(262208,"Сообщение","Выбран вариант= 2", 2)
ExitLoop
Case $11variant_vibora ; Мои действия
MsgBox(262208,"Сообщение","Выбран вариант= 11", 2)
ExitLoop
Case $12variant_vibora ; Мои действия
MsgBox(262208,"Сообщение","Выбран вариант= 12", 2)
ExitLoop
Case $31variant_vibora ; Мои действия
MsgBox(262208,"Сообщение","Выбран вариант= 31", 2)
ExitLoop
EndSwitch
WEnd ; Завершение цикла.
GUIDelete()
; Отображает меню в данном GUI окне, которое принадлежит данному элементу в GUI
Func ShowMenu($hWnd, $CtrlID, $nContextID)
Local $arPos, $x, $y
Local $hMenu = GUICtrlGetHandle($nContextID)
$arPos = ControlGetPos($hWnd, "", $CtrlID)
$x = $arPos[0]
$y = $arPos[1] + $arPos[3]
ClientToScreen($hWnd, $x, $y)
TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc
; Конвертирует клиентские координаты (GUI) в абсолютные координаты экрана (desktop)
Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
Local $stPoint = DllStructCreate("int;int")
DllStructSetData($stPoint, 1, $x)
DllStructSetData($stPoint, 2, $y)
; См. также _WinAPI_ClientToScreen
DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))
$x = DllStructGetData($stPoint, 1)
$y = DllStructGetData($stPoint, 2)
; обнулять структуру не обязательно, так как она локальна
$stPoint = 0
EndFunc
; Показать контекстное меню (hMenu) принадлежащее GUI окну (hWnd) в указанных координатах (x, y)
Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
; См. также _GUICtrlMenu_TrackPopupMenu
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc