On-line: Pasha, гостей 1. Всего: 2 [подробнее..]
АвторСообщение





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 14.12.05 19:15. Заголовок: Клавиатура


Привет!
Есть у меня потребность отслеживать события от клавиатуры внутри формы - какая клавиша (или комбинация ) нажата, анализировать и выполнять определенные действия.
Как это в MiniGui делается?

Спасибо: 0 
Профиль
Ответов - 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

Спасибо: 0 
Профиль





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 10:16. Заголовок: Re:


gfilatov

Спасибо. То есть никаких Dispatch'ей писать не надо?

Спасибо: 0 
Профиль
модератор




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 12:58. Заголовок: Re:


Владимир пишет:
цитата
То есть никаких Dispatch'ей писать не надо?

Хех Программирование под Винды основано на событиях, насколько я знаю...

Спасибо: 0 
Профиль





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 13:03. Заголовок: Re:


gfilatov

Именно так. Просто в одной книжке по Visua C++ как вариант нестандартной обработки предлагается писать свой Dispatch.
Опять же в одном популярном учебнике по CAVO тоже рассматривается вопрос о
написании своего Dispatch'а.
Я именно это имел в виду.

Спасибо: 0 
Профиль
модератор




Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 14:08. Заголовок: Re:


Владимир

Просто не надо заморачиваться! KISS принцип рулит

Спасибо: 0 
Профиль





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 17:54. Заголовок: Re:


gfilatov

Понял.


Спасибо: 0 
Профиль
постоянный участник


Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.12.05 22:09. Заголовок: Re:


Усложним пример. Необходимо открыть комбокс с помощью клавиатуры, а не мышки

Спасибо: 0 
Профиль
модератор




Не зарегистрирован
Зарегистрирован: 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" ) ] ) )


Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 108
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет