unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
protected
public
procedure WndProc(var Message : TMessage); override;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WndProc(var Message : TMessage);
begin
if (Message.Msg = WM_KEYFIRST) then
begin
showmessage('WM_KEYFIRST');
end;
if (Message.Msg = WM_KEYDOWN) then
begin
showmessage('WM_KEYDOWN');
end;
if (Message.Msg = WM_KEYUP) then
begin
showmessage('WM_KEYUP');
end;
if (Message.Msg = WM_CHAR) then
begin
showmessage('WM_CHAR');
end;
if (Message.Msg = WM_DEADCHAR) then
begin
showmessage('WM_DEADCHAR');
end;
if (Message.Msg = WM_SYSKEYDOWN) then
begin
showmessage('WM_SYSKEYDOWN');
end;
if (Message.Msg = WM_SYSKEYUP) then
begin
showmessage('WM_SYSKEYUP');
end;
if (Message.Msg = WM_SYSCHAR) then
begin
showmessage('WM_SYSCHAR');
end;
if (Message.Msg = WM_SYSDEADCHAR) then
begin
showmessage('WM_SYSDEADCHAR');
end;
if (Message.Msg = WM_KEYLAST) then
begin
showmessage('WM_KEYLAST');
end;
inherited WndProc(Message);
end;end.
连一个按键都捕捉不到。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
protected
public
procedure WndProc(var Message : TMessage); override;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WndProc(var Message : TMessage);
begin
if (Message.Msg = WM_KEYFIRST) then
begin
showmessage('WM_KEYFIRST');
end;
if (Message.Msg = WM_KEYDOWN) then
begin
showmessage('WM_KEYDOWN');
end;
if (Message.Msg = WM_KEYUP) then
begin
showmessage('WM_KEYUP');
end;
if (Message.Msg = WM_CHAR) then
begin
showmessage('WM_CHAR');
end;
if (Message.Msg = WM_DEADCHAR) then
begin
showmessage('WM_DEADCHAR');
end;
if (Message.Msg = WM_SYSKEYDOWN) then
begin
showmessage('WM_SYSKEYDOWN');
end;
if (Message.Msg = WM_SYSKEYUP) then
begin
showmessage('WM_SYSKEYUP');
end;
if (Message.Msg = WM_SYSCHAR) then
begin
showmessage('WM_SYSCHAR');
end;
if (Message.Msg = WM_SYSDEADCHAR) then
begin
showmessage('WM_SYSDEADCHAR');
end;
if (Message.Msg = WM_KEYLAST) then
begin
showmessage('WM_KEYLAST');
end;
inherited WndProc(Message);
end;end.
连一个按键都捕捉不到。
这是消息处理过程的声明吗?
既没有保留字Message表示消息句柄,而且还用Override
Shift: TShiftState);
var msg:Tmessage;
begin
msg.Msg:=WM_KEYDOWN;
msg.WParam:=0;
msg.LParam:=0;
WndProc(msg);
end;
增加上面过程
procedure TForm1.FormCreate(Sender: TObject);
begin
self.KeyPreview:=true;
end;
还是没有作用
写在OnMessage里
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_KEYFIRST) then
begin
showMessage('WM_KEYFIRST');
end;
if (Msg.message = WM_KEYDOWN) then
begin
showmessage('WM_KEYDOWN');
end;
if (Msg.message = WM_KEYUP) then
begin
showmessage('WM_KEYUP');
end;
if (Msg.message = WM_CHAR) then
begin
showmessage('WM_CHAR');
end;
if (Msg.message = WM_DEADCHAR) then
begin
showmessage('WM_DEADCHAR');
end;
if (Msg.message = WM_SYSKEYDOWN) then
begin
showmessage('WM_SYSKEYDOWN');
end;
if (Msg.message = WM_SYSKEYUP) then
begin
showmessage('WM_SYSKEYUP');
end;
if (Msg.message = WM_SYSCHAR) then
begin
showmessage('WM_SYSCHAR');
end;
if (Msg.message = WM_SYSDEADCHAR) then
begin
showmessage('WM_SYSDEADCHAR');
end;
if (Msg.message = WM_KEYLAST) then
begin
showmessage('WM_KEYLAST');
end
end;