Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.07;
Скачать: CL | DM;

Вниз

Горячие клавиши для активного приложения   Найти похожие ветки 

 
Zhekson   (2008-10-27 13:28) [0]

Прописанные мной, в примере, горячие клавиши исключают запуск нескольких экземпляров программы одновременно, т.к. во программах после первой не работают эти клавиши. Прим:

//В обработчике события OnCreate
//основной формы создаём горячую клавишу:

if not RegisterHotkey(Handle, 1, MOD_ALT or MOD_SHIFT, VK_F9) then
 ShowMessage("Unable to assign Alt-Shift-F9 as hotkey.");

//В событии OnClose удаляем горячую клавишу:
UnRegisterHotkey( Handle, 1 );

//Добавляем обработчик в форму для сообщения
//WM_HOTKEY:

private // в секции объявлений формы
 procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;

procedure TForm1.WMHotkey( var msg: TWMHotkey );
begin
 if msg.hotkey = 1 then
 begin
   if IsIconic( Application.Handle ) then
     Application.Restore;
   BringToFront;
 end;
end;


Как сделать горячую клавишу на активное приложение, вне зависимости от контрола, который имеет фокус???


 
www   (2008-10-27 13:32) [1]

TAction


 
Leonid Troyanovsky ©   (2008-10-27 14:46) [2]


> Zhekson   (27.10.08 13:28)  

> Как сделать горячую клавишу на активное приложение, вне
> зависимости от контрола, который имеет фокус???

WM_HOTKEY приходит окну вне зависимости от его активности
и наличия (отсутствия) контрола в фокусе.

--
Regards, LVT.


 
Zhekson   (2008-10-27 15:13) [3]


> WM_HOTKEY приходит окну вне зависимости от его активности
> и наличия (отсутствия) контрола в фокусе.

это лишь подтверждает сказанные мной слова... меня же интересует как уйти от глобального параметра, чтобы использовать одну и ту же горячую клавишу, только в разных экземплярах одного приложения???


 
Zhekson   (2008-10-27 15:28) [4]


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (chr(Key) in ["A", "a"]) then
   ShowMessage("Ctrl-A");
end;


вот этот вариант впринципе подходит, но как заставить приложение реагировать на нажатие этих клавишь вне зависимости от того, какой контрол на форме Form1 имеет фокус???


 
Zhekson   (2008-10-27 15:28) [5]


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (chr(Key) in ["A", "a"]) then
   ShowMessage("Ctrl-A");
end;


вот этот вариант впринципе подходит, но как заставить приложение реагировать на нажатие этих клавиш вне зависимости от того, какой контрол на форме Form1 имеет фокус???


 
Сергей М. ©   (2008-10-27 15:32) [6]

Свойство TCustomForm.KeyPreview:

Specifies whether the form should receive keyboard events before the active control.


 
Zhekson   (2008-10-27 16:15) [7]

Сергей М. ©   (27.10.08 15:32) [6]
спс. это то что нужно!



Страницы: 1 вся ветка

Текущий архив: 2008.12.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1225101843
Petr
2008-10-27 13:04
2008.12.07
Поиск ссылок на странице в окне Internet Explorer


1-1203111617
Blind Guardian
2008-02-16 00:40
2008.12.07
Сравнение последовательностей вещественных чисел на сходство


15-1222540548
Копир
2008-09-27 22:35
2008.12.07
Вполне искусственный интеллект


2-1225102276
Sw
2008-10-27 13:11
2008.12.07
формы в dll


2-1225072338
Hadgi
2008-10-27 04:52
2008.12.07
Delphi. Поиск и удаление в телефонном справочнике