![]() |
|
v7: Чем прочитать статус клавиш Shift, Ctrl, Alt (Нажата/не нажата)? | ☑ | ||
---|---|---|---|---|
0
trdm
30.08.11
✎
11:09
|
Чем прочитать статус клавишь Shift, Ctrl, Alt (Нажата/не нажата)?
Есть приблуда? Что-то вроде этого: http://doc.qt.nokia.com/latest/qapplication.html#keyboardModifiers Qt::KeyboardModifiers kbrdMod = qApp->keyboardModifiers(); if (kbrdMod & Qt::ControlModifier)return false; |
|||
1
trdm
30.08.11
✎
11:42
|
,kby/
|
|||
2
Ёпрст
гуру
30.08.11
✎
11:44
|
(0)формекс не катит, или тебе не в 1с ?
|
|||
3
Андрюха
30.08.11
✎
11:48
|
(0) в 1С-ке надо ?
|
|||
4
trdm
30.08.11
✎
11:51
|
в 1Cсv77
|
|||
5
АЛьФ
30.08.11
✎
11:53
|
||||
6
romix
30.08.11
✎
12:03
|
http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx#_win32_Keystroke_Message_Flags About Keyboard Input
RepeatCount:=KeyStroke and $FFFF; //Обычно 1. Больше 1, если система не успевает обработать быстрые повторные нажатия клавиш ScanCode:=(KeyStroke shr 16) and $FF; //Скан-код клавиши ExtendedKeyFlag:=(KeyStroke shr 24) and 1; //Признак расширенной клавиатуры (правый alt и т.п.) ContextCodeFlag:=(KeyStroke shr 29) and 1; //1 если клавиша alt нажата PreviousFlag:=(KeyStroke shr 30) and 1; // Предыдущее состояние (1-нажата, 0-отпущена) TransitionFlag:=(KeyStroke shr 31) and 1; //Текущее состояние (0-нажата, 1-отпущена) Применяется в SetWindowsHookEx/CallNextHookEx (есть образчик на Дельфи). |
|||
7
trdm
30.08.11
✎
12:04
|
У меня 1с++ старая. Там нет "приОтжатииКнопки" т.е. фиксировать статус не получится нормально.
(5) Сенк. Пока ответа ждал уже векашку набросал О_о. |
|||
8
trdm
30.08.11
✎
12:05
|
+(7) не особо сложная вещь оказалась.
// KeyState.kstate STDMETHODIMP Ckstate::keyboardModifiers(long *key, long *state) { // TODO: Add your implementation code here *state = (long) 0; if (((GetKeyState( VK_SHIFT ) & 0x80) > 0) && *key == 1) { *state = (long) 1; } if (((GetKeyState( VK_CONTROL ) & 0x80) > 0) && *key == 2) { *state = (long) 1; } if (((GetKeyState( VK_MENU ) & 0x80) > 0) && *key == 3) { *state = (long) 1; } return S_OK; } |
|||
9
trdm
30.08.11
✎
12:10
|
Я что собственно хотел, у меня есть такая процедурина глПросмотрРеквизитаОбъекта(псКонтекст, псОбъект, псИдОбъекта = "") для кнопок типа [0] в формах, там форма открывается модально. Хочу модифициировать поведение в зависимости от статуса нажатой клавиши.
|
|||
10
Mikeware
30.08.11
✎
12:10
|
(8) на Qt ВК сделал?
|
|||
11
trdm
30.08.11
✎
12:12
|
(10) Mikeware >> на Qt ВК сделал?
Не. Помнится в нете валялся пример "делаем внешнюю компоненту". По его инструкциям. разумеется на VC++ 6.0 |
|||
12
Mikeware
30.08.11
✎
12:21
|
(11) Жаль. Я уж заготовку поклянчить хотел...
|
|||
13
skunk
30.08.11
✎
12:23
|
а можно вопрос ... накуя это в именно в 1С ловить
|
|||
14
trdm
30.08.11
✎
12:24
|
||||
15
FN
30.08.11
✎
12:52
|
(9) использую такую же методу. только переключатель не шифт, а скрол-лок
статус ловится формексом |
|||
16
trdm
30.08.11
✎
12:59
|
(15) FN >> использую такую же методу. только переключатель не шифт, а скрол-лок
но он же фиксируется. возможны ошибки. |
|||
17
FN
30.08.11
✎
13:03
|
(16) кому что удобней
|
|||
18
trdm
07.09.11
✎
16:29
|
Прикольно, модифицировал
Процедуру ОбработкаЯчейкиТаблицы(Расшифровка,СтандартнаяОбработка,Таблица) Экспорт Если нажать на документ с нажатым шифтом, то докум откроется в журнале. Этой фиче можно найти кучу применений. |
|||
19
FN
07.09.11
✎
16:36
|
(18) чем шифт ловишь?
|
|||
20
trdm
07.09.11
✎
16:46
|
http://unnstudioreport.googlecode.com/files/KeyState.rar
//============================================================================== // глНажатаКлавишаШифтКонтролАльт( псКакаяКлавиша, псНажШифт = 0, псНажАльт = 0, псНажатКонтрол = 0 ) © trdm 2011 Функция глНажатаКлавишаШифтКонтролАльт( псКакаяКлавиша = 1, псНажШифт = 0, псНажАльт = 0, псНажатКтрл = 0 ) Экспорт ЗначВозврата = 0; псНажШифт = 0; псНажАльт = 0; псНажатКонтрол = 0; Попытка вОбъект = СоздатьОбъект("KeyState.kstate"); псНажШифт = вОбъект.keyboardModifiers(1); псНажатКтрл = вОбъект.keyboardModifiers(2); псНажАльт = вОбъект.keyboardModifiers(3); Если (псКакаяКлавиша = 1) ИЛИ (псКакаяКлавиша = 2) ИЛИ (псКакаяКлавиша = 3) Тогда ЗначВозврата = вОбъект.keyboardModifiers(псКакаяКлавиша) КонецЕсли; Исключение КонецПопытки; Возврат ЗначВозврата; КонецФункции // глНажатаКлавишаШифтКонтролАльт() -------------------------------------------- Либа нуждается в регистрации: regsvr32 "Путь\KeyState.dll" |
|||
21
trdm
07.09.11
✎
16:47
|
||||
22
FN
07.09.11
✎
16:49
|
(21) спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |