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

Вниз

событие wm_KeyDown   Найти похожие ветки 

 
juiceman ©   (2004-04-16 22:38) [0]

Из справочника по сообщениям:
wm_KeyDown
Уведомляет окно с фокусом, что была нажата несистемная клавиша.

Пытаюсь обрабатывать это сообщение - ничего не получается. Код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
 private
   { Private declarations }
 public
   { Public declarations }
 protected
   Procedure WMGetCommand(var Message : TMessage); message wm_KeyDown;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMGetCommand(var Message : TMessage);
Begin
 ListBox1.Items.Add("Нажата клавиша!");
end;

end.

Другие варианты просьба не предлагать, тут надо сделать именно так (предполагается отлов нажатий в чужом окне, причем через CallWndProc)


 
drpass ©   (2004-04-16 23:32) [1]

Оно уже и так обрабатывается средствами VCL


 
DVM ©   (2004-04-16 23:34) [2]

Оно приходит окну объекта Application, и он его передает другим окнам в другом виде.


 
Гаврила   (2004-04-16 23:49) [3]

Так ты про чужое окно говоришь-то, или про свое ?


 
Jack128 ©   (2004-04-16 23:49) [4]

Почему не работает так как ты написал:
Потому, что у тя на форме наверника есть другие wincontrol"ы, один из них имеет фокус, соответственно сообщение приходит к нему, а не к форме. Как надо делать? Form1.KeyPreview := True; и обрабатывать Form1.OnKeyDown почему это работает? смотрим исходники

function TWinControl.DoKeyDown(var Message: TWMKey): Boolean;
begin
...
Form := GetParentForm(Self);
if (Form <> nil) and (Form <> Self) and Form.KeyPreview and
   TWinControl(Form).DoKeyDown(Message)
then Exit;
...
end; вот если бы вместо TWinControl(Form).DoKeyDown(Message) посылалось бы сообщение wm_keydown ,то твой код работал бы..


 
juiceman ©   (2004-04-17 01:11) [5]

Растолковали очень подробно, спасибо. Но к чему я все это делал?
Есть некое приложение, события от клавиатуры в котором перехватывать не удается (ставлю глобальный хук). Подробнее можно прочитать в
Решил попробовать отлавливать хуком другого типа - WH_CALLWNDPROC. Вот код функции-фильтра:

function CallWndProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
 CWPS : ^CWPSTRUCT;
begin
if code >= 0 then
 begin
   CWPS:=Pointer(lParam);
   if CWPS^.message=WM_KeyDown then
     SendMessage(FindWindow("TForm1","Form1"),WM_USER+1, CWPS^.hwnd, 0);
 end;
 Result:= CallNextHookEx(H, Code, wParam, lParam);
end;

И ничего не отлавливалось, теперь понятно почему. Не понятно только что теперь делать :(


 
juiceman ©   (2004-04-17 01:13) [6]

Извините,
Подробнее можно прочитать в http://delphimaster.net/view/4-1081643815/



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

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

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1084649582
Yong
2004-05-15 23:33
2004.05.30
Как изменить размер текста?


3-1083398938
Andriy Tysh
2004-05-01 12:08
2004.05.30
EDBClient при закрытии ClientDataSet a


7-1082544968
vvv
2004-04-21 14:56
2004.05.30
Com -порт


1-1084608983
AlexZ_CRC
2004-05-15 12:16
2004.05.30
Fofm1.Button*.Caption:=massiv[i];


9-1074633038
Alex Storm
2004-01-21 00:10
2004.05.30
Создание ландшафта на GLScene





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский