![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте. Возникла следующая потребность:
Нужно пользователю сделать выбор горячих клавиш. То есть сам код их уже есть в настройках нужно указать только горячую клавишу. Разъясню на примере: Пользователю нужно, что бы на Tab переходило на новую строку. В настройках уже код этого есть, но там по стандарту стоит enter. Дак вот, пользователь может нажать в настройках допустим на клавишу tab и теперь он может tab'ом переходить между строк. Так называемый key bindings. |
#2
|
||||
|
||||
![]() Код:
Это пример вставки гарячих клавиш, взял с делфи ворда, дак вот, если ты хочешь, чтоб в даном примере например место alt+shift+f9 поменять на ctrl+shift+f9, то измени строчку Код:
Помогаю за Спасибо ![]() |
#3
|
|||
|
|||
![]() Мне не совсем это надо. Если я в ручную буду перебирать все сочетания, то это не реально. Пользователь может зажать любые клавиши, которые и станут горячими, хоть ENTER, хоть Q+1. Можно ли такое реализовать?
|
#4
|
||||
|
||||
![]() Почему нереально?
В настройках (или где тебе надо изменять гарячие клавиши) создаешь едит (например), в который пользователь будет вводить 3 клавишу (пример: Alt+Shift (обязательные) + его клавиша (может быть например F2)), и есть глобальная переменная (допустим q: integer), и когда пользователь нажимает "сохранить настройки" пишешь в buttonsaveClick: Код:
Где q - сама клавиша (коды клавиш можешь найти в инете)... Помогаю за Спасибо ![]() |
#5
|
|||
|
|||
![]() Спасибо, жаль что только через ктрл шифт, думал можно и обычные клавиши устанавливать.
|
#6
|
|||
|
|||
![]() можно любые. делай через Action's.
|
#7
|
|||
|
|||
![]() Решил делать первым способом, только возникла проблема. Мне надо сделать так: Когда человек нажимает ctrl+shift+f1, то происходит одно действие, когда ctrl+shift+f2, то другое. Дак вот как определить какую именно клавишу нажал человек и передать это процедуре TForm1.WMHotkey( var msg: TWMHotkey ); ?
|
#8
|
||||
|
||||
![]() Ты каждой гарячей клавише даешь "номер (id)", дак вот с ним и работай, пример:
Код:
Надеюсь понял ![]() Помогаю за Спасибо ![]() |
#9
|
|||
|
|||
![]() Понял, попробую, спасибо.
Upd. Решил сделать через массив, получилось такое, мне просто надо, что бы было забито от F1 до F9. Код:
Когда компилю выдаёт еррор, но не в привычной форме, т.е. внизу, а еррор типа как в ексе виндоуса: Project1.exe raised expection class EConvertError with messgae "VK_F1' is not a valid integer value' Последний раз редактировалось Мяфк, 06.10.2010 в 09:58. |
#10
|
||||
|
||||
![]() Правильно. Ты пытаешься текст 'VK_F1' перевести в число.
Вообще VK_F1 и т.п. это константы целого типа. И VK_F1 = 112 и далее +1 до VK_F24 = 135 Приведённый выше код это пример использования ГЛОБАЛЬНЫХ горячих клавиш, т.е. твоя программа будет отлавливать их даже если у тебя активно окно совсем другой программы. И если будут использоваться популярные сочетания горячих клавиш, то когда включена данная программа, эти же сочетания не будут работать в других программах, твоя программа будет их просто перехватывать. Если тебе не нужен глобальный перехват горячих клавиш, то используй события: OnKeyPress (Клавиша нажата) OnKeyDown (Клавиша зажата) OnKeyUp (Клавиша отпущена) Обычно 2 последних события используются для обработки модификационных клавиш (Alt, Ctrl, Shift) Приведу код использования из моей курсовой ![]() Код:
IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © Последний раз редактировалось Sky.NET, 06.10.2010 в 13:13. |
#11
|
|||
|
|||
![]() Спасибо, но проблема. Сделал такой код под себя:
Код:
|
#12
|
||||
|
||||
![]() Должен быть активен объект с ссылкой на эту процедуру в событии. Можешь задать ссылки на эту процедуру для всех объектов.
IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#13
|
|||
|
|||
![]() Не понял какой именно объект rich edit что ли?
|
#14
|
||||
|
||||
![]() Любой объект. Ведь ты по умолчанию используешь объект Form, а если ты нажимаешь на кнопку, или вводишь значение в Edit, то они становятся активными...
Sorry, не так выразился ![]() Наводится на них фокус. И если у этого объекта есть событие по нажатию клавиш, то процедура сработает. Чтобы сработало везде, нужно всем объектам, которые могут иметь фокус, сделать ссылку на процедуру в событии. P.S. Возможно можно сделать, чтобы объекты перенимали события от формы как дочерние, но можно ли вообще так сделать я не знаю. P.P.S. А кстати, хороший вопрос ![]() IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © Последний раз редактировалось Sky.NET, 08.10.2010 в 18:24. |
#15
|
|||
|
|||
![]() Сделал я у рич едита событие, других фокусов нету. Но всё равно не срабатывает, пытался и с альтом и с контром
|