Что нового

[Баг] GUISetAccelerators перестаёт работать после переназначения

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
В некоторых ситуациях, после повторного использования GUISetAccelerators, назначенные клавиши не реагируют.

Вот пример воспроизведения:

Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Custom Msgbox", 210, 200)

GUICtrlCreateLabel("Please press SHIFT and then SPACE (not together), now try to call [CTRL + Y] hotkey.", 10, 10, 190, 40)
$YesID = GUICtrlCreateButton("Yes", 10, 50, 50, 20)

;$EditID = GUICtrlCreateEdit("", 20, 100, 150, 80)

$nSpace_Ctrl = GUICtrlCreateDummy()

Dim $AccelKeys[2][2] = [["^y", $YesID], ["{SPACE}", $nSpace_Ctrl]]
GUISetAccelerators($AccelKeys)

GUISetState(@SW_SHOW)  ; display the GUI

Do
	$msg = GUIGetMsg()
	
	Select
		Case $msg = $nSpace_Ctrl
			;GUISetAccelerators(0, $hGUI) ;This line can be commented actualy, it's not needed for the bug reproduction
			;ControlSend($hGUI, "", $EditID, "{SPACE}") ;This line can be commented actualy, it's not needed for the bug reproduction
			
			GUISetAccelerators($AccelKeys, $hGUI)
		Case $msg = $YesID
			MsgBox(0, "You clicked on", "Yes")
	EndSelect
Until $msg = $GUI_EVENT_CLOSE


Сфокусируйте Edit-поле (кликом в него :smile:), нажмите SHIFT и затем SPACE (не вместе), а теперь попробуйте вызвать Ctrl + Y. По идее должно сработать событие элемента $YesID (именно так происходит до проделанных действий указанных выше), но этого не происходит, сама же кнопка нормально реагирует при нажатий.

Кстати вместо Space может быть любая другая клавиша.

P.S
Для тех кто интересуется зачем я это сделал: мне нужно было позволить ввод пробела (Space) только для Edit-поля, и естественно на это время акселераторы нужно было отключать.


Добавлено:
Сообщение автоматически объединено:

Оказывается это всё таже старая проблема с раскладкой клавиатуры.

Вот так работает:

Код:
Dim $AccelKeys[3][2] = [["^y", $YesID], ["^н", $YesID], ["{SPACE}", $nSpace_Ctrl]]

(спасибо Medic84 за подсказку)
 
Верх