![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Горячие клавиши [D7, XP]
Age © (2008-09-01 21:15:00)Здравствуйте, многоуважаемые мастера Delphi!
Существует проблема с горячими клавишами, дело в том что мне необходимо, что бы выполнялись определенные действия при нажатие на клавиши ctrl+Enter. Все бы ни чего, нашел код все работает, но проблема в том, перехватываются во всем приложениях. Вопрос как можно реализовать так, чтобы выполнялось только, когда курсор расположен в моем приложений в RxRichEdit?
Вот код который я использовал:
procedure Tmainform.WM_HotKeyHandler (var Message: TMessage);
var
idHotKey: integer; //идентификатор, но об этом - позже
fuModifiers: word; //модификатор MOD_XX
uVirtKey: word; //код виртуальной клавиши VK_XX
begin
// параметры сообщения получаем так:
idHotkey:= Message.wParam;
fuModifiers:= LOWORD(Message.lParam);
uVirtKey:= HIWORD(Message.lParam);
//теперь - небольшая проверочка:
if (fuModifiers = MOD_CONTROL) AND (uVirtKey = VK_RETURN) and (RxRichEdit.focused) then
sendbutton.click();
inherited;
end;
И в событие OnKeyDown, компонента RxRichEdit
keyid:=GlobalAddAtom('My Hotkey'); //создаем атом
RegisterHotKey(handle,keyid,MOD_CONTROL,VK_RETURN);
Slym (2008-09-02 13:54:00) [1]Nный раз читаю тему топика и думаю что очередной спам покно-клавиш :) enlarge your keyboard
@!!ex (2008-09-02 08:38:00) [2]> [5] Age (01.09.08 23:41)
Это просто реализация того, что я написал в [1].
Почему бы не залезть в хелп и не посмотреть описание параметров метода??
Германн (2008-09-02 01:29:00) [3]
> нашел код все работает, но
А не надо искать код. Надо читать и учить.
Age (2008-09-01 23:41:00) [4]Loginov Dmitry © (01.09.08 22:52) [4]
Большое спасибо о мастер!!!
Всем спасибо кто пытался помочь
Loginov Dmitry (2008-09-01 22:52:00) [5]> Существует проблема с горячими клавишами, дело в том что
> мне необходимо, что бы выполнялись определенные действия
> при нажатие на клавиши ctrl+Enter. Все бы ни чего, нашел
> код все работает, но проблема в том, перехватываются во
> всем приложениях. Вопрос как можно реализовать так, чтобы
> выполнялось только, когда курсор расположен в моем приложений
> в RxRichEdit?
Обычно проблема как раз возникает на глобальном перехвате. На перехвате в рамках своего приложения все просто, все в твоих руках. Обычный KeyDown на ричедите отлично справляется, ровно как и TAction.
Пример:
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_RETURN) then
begin
//
end;
end;
MsGuns (2008-09-01 22:36:00) [6]TAction ?
Age (2008-09-01 21:38:00) [7]Я именно так и начал, но мне необходимо именно Ctrl+Enter как можно это отследить? Получать код не помогает и использование виртуальные клавиши то же не получилось?!
@!!ex (2008-09-01 21:35:00) [8]Так не юзай горячие клавиши. Юзай событие OnKeyDown.
ГОрячие клавиши тут нафигш не сплющились...
Они как раз нужны, когда надо реагировать на нажатие во всей системе...