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

Вниз

Перехват сообщений мыши и клавиатуры   Найти похожие ветки 

 
Калям   (2006-03-22 20:14) [0]

Есть невизуальный компонент, наследник TComponent. Каким образом сделать так, чтобы все сообщения о нажатии клавиши (в т. ч. F1-F12) сначала обрабатывались этим компонентом, а лишь затем теми, кем владеет форма. Аналог такого механизма реализован в форме: свойство KeyPreview. Однако форма - наследник TWinControl, а данный компонент - нет.


 
Юрий Зотов ©   (2006-03-22 20:36) [1]

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


 
Калям   (2006-03-23 10:40) [2]

Что есть хук?


 
Юрий Зотов ©   (2006-03-23 23:19) [3]

> Калям   (23.03.06 10:40) [2]

Это вопрос к справке по Windows (cм. SetWindowsHookEx) и на форум по WinAPI.


 
Наиль ©   (2006-03-23 23:50) [4]

Хук - процедура которая получает сообщение раньше, чем тот, кому сообщение предназначено. Есть два вида хука
1. От Борланда. Application.HookMainWindow. Для работы внутри приложения.
2. От Микрософта. Может использоваться для перехвата сообщений чужих приложений. Приведу самый краткий из полных ответов котрые мне встречались:
Юрий Зотов ©  (07.06.05 01:40)  [16]
Вот решение задачи в общем виде, независимо от того, какое меню, какого контрола и каким образом закрылось.

var
 Hook: HHOOK;
function CallWndRetProc(Code, Flag, PData: integer): integer; stdcall;
begin
 if PCWPRetStruct(PData)^.message = WM_EXITMENULOOP then
   MessageBox(0, "Menu closed", PChar(Application.Title), MB_OK or MB_TASKMODAL or MB_TOPMOST);
 Result := CallNextHookEx(Hook, Code, Flag, PData)
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
 Hook := SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc, 0, GetCurrentThreadId)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnhookWindowsHookEx(Hook)
end;


 
Наиль ©   (2006-03-24 00:02) [5]

В догонку к [4]
В твоём случае, вместо WM_EXITMENULOOP должен быть WM_KEYDOWN, WM_KEYUP или сообщение мыши.
Думаю пищи для размышлений достаточно.



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

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

Наверх




Память: 0.48 MB
Время: 0.05 c
6-1151566641
ПЛОВ
2006-06-29 11:37
2006.11.19
Как получить количество отправленных/принятых байт?


15-1162183145
Slider007
2006-10-30 07:39
2006.11.19
С днем рождения ! 28 октября


15-1162221542
Lebedev
2006-10-30 18:19
2006.11.19
MediaPlayer не приигрывает avi видео-ролик цифрового фотика.


15-1162486418
Kolan
2006-11-02 19:53
2006.11.19
Дайте определение полиморфизма


5-1143373988
sirin
2006-03-26 15:53
2006.11.19
работа в рантайме с классами (не обьектами)