[решено] Не работает GUISetAccelerators

Ответить
Аватара пользователя
Centrinar

[решено] Не работает GUISetAccelerators

Сообщение Centrinar »

Код:

Код: Выделить всё

#include 
#include 
#include 
#Region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$nStngs_Btn = GUICtrlCreateButton("Настройки", 10, 170, 70, 20)
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#EndRegion Main form
#Region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#EndRegion Settings form
Dim $AccelKeys[2][2]=[["{F5}", $nStngs_Btn], ["^n", $nStngs_Btn]]
GUISetAccelerators($AccelKeys)
While 1
    $aMsg = GUIGetMsg(1) ;Расширенная обработка событий
    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE, $nExit_Btn, $nStngs_Close_Btn
            Switch $aMsg[1]
                Case $hMain_GUI  ;Событие поступило от главного окна - завершаем работу скрипта
                    Exit
                Case $hStngs_GUI ;Событие поступило от окна настроек - закрываем его
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
        Case $nStngs_Btn
            GUISetState(@SW_SHOW, $hStngs_GUI)
    EndSwitch
WEnd

Где ошибка?
Аватара пользователя
madmasles

Re: [решено] Не работает GUISetAccelerators

Сообщение madmasles »

Centrinar,



Код:

Код: Выделить всё

#include 
#region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$nStngs_Btn = GUICtrlCreateButton("Настройки", 10, 170, 70, 20)
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#endregion Main form
Dim $AccelKeys[3][2] = [["{F5}", $nStngs_Btn],["^n", $nStngs_Btn],['^т', $nStngs_Btn]]
GUISetAccelerators($AccelKeys)
#region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#endregion Settings form
While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
        Case $hMain_GUI
            Switch $aMsg[0]
                Case $GUI_EVENT_CLOSE, $nExit_Btn
                    Exit
                Case $nStngs_Btn
                    GUISetState(@SW_SHOW, $hStngs_GUI)
            EndSwitch
        Case $hStngs_GUI
            Switch $aMsg[0]
                Case $GUI_EVENT_CLOSE, $nStngs_Close_Btn
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
    EndSwitch
WEnd
Аватара пользователя
Creat0R

Re: [решено] Не работает GUISetAccelerators

Сообщение Creat0R »

Мда... у меня ушло минут 10 на то чтобы найти, что там исправлено в версий от madmasles Изображение, а что уже говорить о новичках которые заглянут в эту тему.



Решение: указать второй параметр в функций GUISetAccelerators($AccelKeys, $hMain_GUI).



P.S

madmasles, если помните, решение проблемы с раскладкой клавиатуры есть
тут
Изображение.
Аватара пользователя
madmasles

Re: [решено] Не работает GUISetAccelerators

Сообщение madmasles »

Creat0R,

С учетом Ваших замечаний:
читать дальше »




Код:

Код: Выделить всё

#include 
ConsoleWrite(_WinAPI_LoadKeyboardLayout_CreatoR(0x0409) & @CR)
#region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$nStngs_Btn = GUICtrlCreateButton("Настройки", 10, 170, 70, 20)
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#endregion Main form
#region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#endregion Settings form
Dim $AccelKeys[2][2] = [["{F5}", $nStngs_Btn],["^n", $nStngs_Btn]]
GUISetAccelerators($AccelKeys, $hMain_GUI)
While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
        Case $hMain_GUI
            Switch $aMsg[0]
                Case $GUI_EVENT_CLOSE, $nExit_Btn
                    Exit
                Case $nStngs_Btn
                    GUISetState(@SW_SHOW, $hStngs_GUI)
            EndSwitch
        Case $hStngs_GUI
            Switch $aMsg[0]
                Case $GUI_EVENT_CLOSE, $nStngs_Close_Btn
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
    EndSwitch
WEnd
Func _WinAPI_LoadKeyboardLayout_CreatoR($sLayoutID, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)
    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf
        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf
    Return SetError(1)
EndFunc   ;==>_WinAPI_LoadKeyboardLayout_Creat0R
Аватара пользователя
Iska

Re: [решено] Не работает GUISetAccelerators

Сообщение Iska »

Цитата Creat0R:



Мда... у меня ушло минут 10 на то чтобы найти, что там исправлено в версий от madmasles , а что уже говорить о новичках которые заглянут в эту тему.
[решено] Не работает GUISetAccelerators




Creat0R, Вы
WinMerge
не пользуете для сравнения? Достаточно удобно. Или я совсем неправильно понял?
Аватара пользователя
Creat0R

Re: [решено] Не работает GUISetAccelerators

Сообщение Creat0R »

Цитата Iska:



Вы WinMerge не пользуете для сравнения? Достаточно удобно.
[решено] Не работает GUISetAccelerators




Я обычно использую Pspad, но тут мелочь, думал глазами найду. Но суть не в этом.
Ответить

Вернуться в «AutoIt»