Подсмотрел в одной программе и хочу попробовать повторить на Autoit.
При клике на поле ввода (Input) кроме свободного ввода всплывает элемент (кнопка) с меню выбора функции, результат которой отображается в поле ввода.
Пока что сделал, что сделал. Может не самый правильный алгоритм, тогда предложите другой.
Сейчас застрял на том, что не срабатывает нажатие на кнопку.
Вот код. Кто может помочь? Спасибо.
При клике на поле ввода (Input) кроме свободного ввода всплывает элемент (кнопка) с меню выбора функции, результат которой отображается в поле ввода.
Пока что сделал, что сделал. Может не самый правильный алгоритм, тогда предложите другой.
Сейчас застрял на том, что не срабатывает нажатие на кнопку.
Вот код. Кто может помочь? Спасибо.
Код:
#include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <GUIConstantsEx.au3>
#include <GuiMenu.au3>
#include <GuiToolbar.au3>
#include <WinAPIConstants.au3>
#include <WindowsConstants.au3>
Local $Main = GUICreate("Main", 600, 440, 190, 120)
Local $SubWin = GUICtrlCreateButton("Sub Window", 180, 160, 150, 40)
Global $SubGUI
; Create OptGUI for future use
Global $OptGUI = _OptGUI($SubGUI)
Global $OptButton = -1, $OptComboBox = -1
GUISetState(@SW_SHOW, $Main)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $SubWin
_SubWin()
EndSwitch
WEnd
Func _SubWin()
Local $ParamInput[10]
$SubGUI = GUICreate("Sub GUI", 523, 420, 192, 124, -1, -1, $Main)
GUISetFont(11)
#Region Inputs
Local $SimpleInput1 = GUICtrlCreateInput("", 170, 102, 60, 22)
Local $SimpleInput2 = GUICtrlCreateInput("", 170, 132, 60, 22)
Local $SimpleInput3 = GUICtrlCreateInput("", 300, 132, 60, 22)
GUICtrlCreateLabel("1", 30, 210, 20, 20)
$ParamInput[1] = GUICtrlCreateInput("", 40, 210, 100, 20)
GUICtrlCreateLabel("2", 30, 235, 20, 20)
$ParamInput[2] = GUICtrlCreateInput("", 40, 235, 100, 20)
GUICtrlCreateLabel("3", 30, 260, 20, 20)
$ParamInput[3] = GUICtrlCreateInput("", 40, 260, 100, 20)
GUICtrlCreateLabel("4", 190, 210, 20, 20)
$ParamInput[4] = GUICtrlCreateInput("", 205, 210, 100, 20)
GUICtrlCreateLabel("5", 190, 235, 20, 20)
$ParamInput[5] = GUICtrlCreateInput("", 205, 235, 100, 20)
GUICtrlCreateLabel("6", 190, 260, 20, 20)
$ParamInput[6] = GUICtrlCreateInput("", 205, 260, 100, 20)
GUICtrlCreateLabel("7", 350, 210, 20, 20)
$ParamInput[7] = GUICtrlCreateInput("", 360, 210, 100, 20)
GUICtrlCreateLabel("8", 350, 235, 20, 20)
$ParamInput[8] = GUICtrlCreateInput("", 360, 235, 100, 20)
GUICtrlCreateLabel("9", 350, 260, 20, 20)
$ParamInput[9] = GUICtrlCreateInput("", 360, 260, 100, 20)
#EndRegion Inputs
Local $OK = GUICtrlCreateButton("OK", 120, 380, 105, 25)
Local $Cancel = GUICtrlCreateButton("Cancel", 240, 380, 105, 25)
GUISetState(@SW_SHOW, $SubGUI)
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
If $aMsg[1] = $SubGUI Then
GUIDelete($SubGUI)
If WinExists($OptGUI) Then GUISetState(@SW_HIDE, $OptGUI)
Return
EndIf
Case $Cancel, $OK
GUIDelete($SubGUI)
If WinExists($OptGUI) Then GUISetState(@SW_HIDE, $OptGUI)
Return
Case $GUI_EVENT_PRIMARYUP
$ci = GUIGetCursorInfo()
For $i = 1 To 9
If IsArray($ci) Then
If $ci[4] = $SimpleInput1 Or $ci[4] = $SimpleInput2 Or $ci[4] = $SimpleInput3 Or $ci[4] = $ParamInput[$i] Then
Local $WinPos = WinGetPos($SubGUI)
Local $ControlPos = ControlGetPos($SubGUI, '', $ci[4])
GUISetState(@SW_SHOW, $OptGUI)
WinMove($OptGUI, "", $WinPos[0] + $ControlPos[0] + 20, $WinPos[1] + $ControlPos[1] - 2)
WinActivate($OptGUI)
GUISwitch($SubGUI)
EndIf
EndIf
Next
Case $OptButton
WinActivate($OptGUI)
MsgBox(0, "", "Opt button")
GUISetState(@SW_HIDE, $OptGUI)
EndSwitch
WEnd
EndFunc ;==>_SubWin
Func _OptGUI($ParentGUI)
Local $WinPos = WinGetPos($ParentGUI)
$OptGUI = GUICreate("", 90, 20, $WinPos[0], $WinPos[1], $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST, $ParentGUI)
$OptButton = GUICtrlCreateButton('Button', 0, 0, 90, 20)
Return $OptGUI
EndFunc ;==>_OptGUI