Обработка горячих клавиш!

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Помогите, пожалуйста, решить следующий трабл!
Есть записи в стандартной таблице Browse ABC C55H. Есть кнопки, которые двигают эти записи вверх-вниз-в начало- в конец.
Надо навесить на эти кнопки горячие клавиши:
– вверх – Shift+Up
- вниз – Shift+Down
- в начало - Ctrl+Shift+Up
- в конец – Ctrl+Shift+Down
На окне списка прописываю соответствующие горящие клавиши (Alert…), а в точке вставки в секции AlertKey пишу что-то вроде:
Case KeyCode()
OF ShiftUp
Select(?MoveUp)
PressKey(EnterKey)
OF ….
……………..
End
Все работает, но….. чтобы еще раз отработать эту комбинацию клавиш, надо сначала отпустить и Shift и Up, и только после этого нажать их заново.
А нужно: удерживая (постоянно) Shift и нажимая периодически на Up, перемещать запись.
Помогите, знающие люди, очень уж сильно и срочно надо!!!
Написал: NewUser(217)
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

предисловие: легко это не решается :) хотя в сабклассинге я особо трудного ничего не вижу

необходимо засабклассить лист бокс, в процедуре сабклассинга отлавливать события WM_KEYDOWN - нажатие кнопки, WM_KEYUP - отпустили кнопку

подробнее про сабклассинг можно узнать:
http://www.zero.clarionlife.net/Article ... lass.shtml
http://www.pisoft.ru/verstak/Insider/col_subclass.htm


Написал: PAA(27)
Гость

Сообщение Гость »

Спасибо за столь оперативный отклик! Буду стараться столь же оперативно разобраться с этим самым сабклассингом.
Написал: NewUser(217)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Сообщение Дед Пахом »

У кнопок есть атрибут "Repeat" на закладке экстра, его значение это как часто срабатывает на кнопке событие Event:Accepted, пока кнопка нажата и не отпущена. Может, с этим поиграться?
Написал: Дед Пахом(89)
Гость

Сообщение Гость »

В принципе (на сколько я понимаю этот самый принцип), для решения данной задачи надо отслеживать момент нажатия и момент отпускания кнопки Shift. При нажатии: loc:Shift = 1, при отпускании: loc:Shift = 0

Case KeyCode()
OF UpKey
IF loc:Shift = 1
Select(?MoveUp)
PressKey(EnterKey)
OF ….
……………..
End

Неужто в Кларионе для отслеживания нажатия и отпускания клавиш (не мышиных) нет никаких-никаких собственных средств? Регион, положенный на лист-бокс мне не поможет? Может что-нибудь из API? Или приговор – жесткий и безапелляционный – сабклассинг?
Написал: NewUser(217)
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

KEYSTATE( )
Написал: PAA(27)
Ответить