|   |   | 
| 
 | 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) спасибо     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |