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;

解决方案 »

  1.   

    能截到的。可是我的DELPHI打不开了。没法写代码
      

  2.   

    我运行了以前写的一个程序,WPARAM的值分别是37、38、39、40对应左、上、右、下。
      

  3.   

    http://dev.csdn.net/article/23/23213.shtm
      

  4.   

    处理
    Application.OnMessage
    从新写一个过程来处理消息,或者屏蔽什么的。
      

  5.   

    用个笨方法
    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;
      

  6.   

    unit testbutton;interface
     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.
      

  7.   

    <<难道不是wm_keydown?的确不是,你看看procedure TControl.WndProc(var Message: TMessage);定义就知道了
      

  8.   

    Eastunfail(龙子龙孙)==(恶鱼杀手) 
    貼的鏈接已經解決了你的問題!!!