Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 14.12.05 19:15. Заголовок: Клавиатура
Привет! Есть у меня потребность отслеживать события от клавиатуры внутри формы - какая клавиша (или комбинация ) нажата, анализировать и выполнять определенные действия. Как это в MiniGui делается?
|
|
|
Ответов - 8
[только новые]
|
|
|
| модератор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.12.05 17:55. Заголовок: Re:
Владимир пишет: цитата Как это в MiniGui делается?
Для этого используется команда ON KEY <hotkey> ACTION <action> Пример использования: #include "MiniGUI.ch" Function main_cas() DEFINE WINDOW Form_1 AT 97,62 WIDTH 348 HEIGHT 176 MAIN TITLE "Checkbox HMG Demo" ON KEY ALT+X action ThisWindow.Release ON KEY CONTROL+X action ThisWindow.Release @ 23,34 CHECKBOX CheckBox_1 CAPTION "CheckBox_1" WIDTH 100 HEIGHT 28 @ 23,203 CHECKBOX CheckBox_2 CAPTION "CheckBox_2" WIDTH 100 HEIGHT 28 LEFTJUSTIFY // altsyntax test DEFINE CHECKBOX Check_1a ROW 50 COL 34 CAPTION 'Check 1a' VALUE .T. TOOLTIP 'CheckBox' ONCHANGE PLAYOK() END CHECKBOX DEFINE CHECKBOX Check_1b ROW 50 COL 203 CAPTION 'Check 1b' VALUE .T. TOOLTIP 'CheckBox' LEFTJUSTIFY .T. END CHECKBOX DEFINE MAIN MENU POPUP 'M&isc' ITEM 'Set CheckBox_1 Value Property' ACTION Form_1.CheckBox_1.Value := .t. ITEM 'Get CheckBox_1 Value Property' ACTION MsgInfo ( IIF(Form_1.CheckBox_1.Value,"True","False") ,'CheckBox_1') ITEM 'Set CheckBox_1 Row Property' ACTION Form_1.CheckBox_1.Row := max(Val(InputBox('Enter Row','')),1) ITEM 'Set CheckBox_1 Col Property' ACTION Form_1.CheckBox_1.Col := max(Val(InputBox('Enter Col','')),1) SEPARATOR ITEM 'Set CheckBox_2 Value Property' ACTION Form_1.CheckBox_2.Value := .t. ITEM 'Get CheckBox_2 Value Property' ACTION MsgInfo ( IIF(Form_1.CheckBox_2.Value,"True","False") ,'CheckBox_2') ITEM 'Set CheckBox_2 Row Property' ACTION Form_1.CheckBox_2.Row := max(Val(InputBox('Enter Row','')),1) ITEM 'Set CheckBox_2 Col Property' ACTION Form_1.CheckBox_2.Col := max(Val(InputBox('Enter Col','')),1) END POPUP END MENU END WINDOW Form_1.Center Form_1.Activate Return Nil
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 10:16. Заголовок: Re:
gfilatov Спасибо. То есть никаких Dispatch'ей писать не надо?
|
|
|
|
| модератор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 12:58. Заголовок: Re:
Владимир пишет: цитата То есть никаких Dispatch'ей писать не надо?
Хех Программирование под Винды основано на событиях, насколько я знаю...
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 13:03. Заголовок: Re:
gfilatov Именно так. Просто в одной книжке по Visua C++ как вариант нестандартной обработки предлагается писать свой Dispatch. Опять же в одном популярном учебнике по CAVO тоже рассматривается вопрос о написании своего Dispatch'а. Я именно это имел в виду.
|
|
|
|
| модератор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 14:08. Заголовок: Re:
Владимир Просто не надо заморачиваться! KISS принцип рулит
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 17:54. Заголовок: Re:
gfilatov Понял.
|
|
|
|
| постоянный участник
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 16.12.05 22:09. Заголовок: Re:
Усложним пример. Необходимо открыть комбокс с помощью клавиатуры, а не мышки
|
|
|
|
| модератор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 19.12.05 18:21. Заголовок: Re:
Vlad04 пишет: цитата Необходимо открыть комбокс с помощью клавиатуры, а не мышки
Для этого в Винде есть стандартные клавиши: - F4; - Alt+<стрелка вниз> Если требуется иметь СВОИ пользовательские клавиши, то посмотри, как это сделано в примере FileMan из поставки HMG 1.1 Experimental ON KEY ALT+F8 ACTION ( Form_Main.Combo_1.SetFocus, ; ComboboxShowList( _HMG_aControlHandles[ GetControlIndex( "Combo_1", "Form_Main" ) ] ) )
|
|
|
|