procedure TListView_San.WndProc(var message: tmessage);
begin try case message.Msg of
WM_KEYDOWN:
showmessage(inttostr(message.wparam));//当是方向键的时候总是不触发。我在tbutton等这样的有焦点控件的onkeydown里面也捕捉不到方向键的消息,因为按下方向键的时候焦点就离开了此控件。而即便ketpreview=true的tform的onkeydown里面也捕捉不到。怎么能让twincontrol捕捉到这个消息呢?难道不是wm_keydown?我不想用钩子,谢谢!!
finally
inherited;
end;
end;
begin try case message.Msg of
WM_KEYDOWN:
showmessage(inttostr(message.wparam));//当是方向键的时候总是不触发。我在tbutton等这样的有焦点控件的onkeydown里面也捕捉不到方向键的消息,因为按下方向键的时候焦点就离开了此控件。而即便ketpreview=true的tform的onkeydown里面也捕捉不到。怎么能让twincontrol捕捉到这个消息呢?难道不是wm_keydown?我不想用钩子,谢谢!!
finally
inherited;
end;
end;
Application.OnMessage
从新写一个过程来处理消息,或者屏蔽什么的。
procedure TForm1.NewMessage(var Msg: TMsg; var Handled: Boolean);
begin
if msg.message=wm_keydown then
if button1.Focused then
if(msg.wParam=37)or(msg.wParam=38)or(msg.wParam=39)or(msg.wParam=40) then
showmessage('');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage:=NewMessage;
end;
uses buttons,Windows, Messages, Classes, Controls, Forms, Graphics, StdCtrls,
ExtCtrls, CommCtrl,dialogs,sysutils;
type Ttestbutton=Class(Tbutton)
private
procedure wndproc(var message:Tmessage); override;
end;
procedure Register;
implementationprocedure Ttestbutton.wndproc(var message:Tmessage);
begin
if (Message.Msg >= WM_KEYFIRST) and (Message.Msg <= WM_KEYLAST) then
showmessage(inttostr(message.wparam));//
inherited;
end;procedure Register;
begin
RegisterComponents('System', [Ttestbutton]);
end;
end.
貼的鏈接已經解決了你的問題!!!