类似Form,Button这样的组件都有Keydown,keyup事件。当有键盘输入的时候,这两个时间都会被调用。请问有什么办法可以在Keydown发生的时候把消息删除,使它不发生KeyUP事件?

解决方案 »

  1.   

    1、在onkeyup事件函数里面什么都不写。
    2、重载tform.wndproc,当遇到wm_keyup的时候令result:=1;
    3、在tform里面声明procedure wmkeyup(var msg:tmessage);message wm_keyup;并令其implememtation为空。
    4、改变application.onmessage为自己的处理函数,遇到wm_keyup消息的时候令handled:=true;
    5、建立自己的消息循环:
    procedure mymsgloop;
    var
    msg:tmsg;
    begin
      while getmessage(msg,0,0,0) do
      begin
        if msg.message=wm_keyup then continue;
        translatemessage(msg);
        dispatchmessage(msg);
      end;
      halt;
    end;//formcreate的时候调用即可。
      

  2.   

    我也赞同Override WNDPROC消息/ by LY http://www.99898.com/www/lysoft
      

  3.   

    inherited吃掉这个消息...这个是对该消息进行处理,如果不想发送直接inherited就OK啦..不用加什么代码 ..