非模式窗体中的可编辑控件无法响应LEFT、RIGHT、UP、DOWN、HOME、END、CTRL+V等按键的解决办法!

非模式窗体中的可编辑控件无法响应LEFT、RIGHT、UP、DOWN、HOME、END、CTRL+V等按键的解决办法!

 

 

非模式窗体由于没有自己的消息循环,造成无法响应以上按键事件,后来使用向非模式窗体添加TApplicationEvent控件解决问题。

 

procedure TDlgFindFile.aplctnvntsMessage(var Msg: tagMSG;
  var Handled: Boolean);
const
    DialogKeys: set of Byte = [VK_ESCAPE,VK_END,VK_HOME,VK_LEFT, VK_RIGHT, VK_UP,VK_DOWN];//定义要截取的按键
var
  CtrlPress:Boolean;
begin
  if IsChild(Handle, Msg.hwnd) and (Msg.message = WM_KEYDOWN)then

 //判断是否是自己窗口产生的事件和是否为键盘事件
  begin
    CtrlPress:=False;
    IF GetKeyState(VK_CONTROL)<0 then//判断CTRL键状态
       CtrlPress:=True;
    if (Msg.wParam=$56) and CtrlPress then//判断是否为CTRL+V键组合按键
    begin
      //if (ActiveControl is TComboBox) or (ActiveControl is TEdit) or (ActiveControl is TMemo) then
      begin
         SendMessage(ActiveControl.Handle,WM_PASTE,0,0);//直接向活动控件发粘贴消息,这里不能使用发送键盘事件的方法
         Handled := True;
      end;
    end else if Msg.wParam in DialogKeys then
    begin
      if Msg.wParam= VK_ESCAPE then//判断是否为 VK_ESCAPE 键按下,如果是,则关闭(隐藏)窗口
      begin
        Close;
      end else
      //if (ActiveControl is TComboBox) or (ActiveControl is TEdit) or (ActiveControl is TMemo) then
      begin
         SendMessage(ActiveControl.Handle,WM_KEYDOWN,Msg.wParam,Msg.lParam);

        //直接将Message复制发送到活动控件,至于是否处理按键由活动控件自己去处理
         Handled := True;
      end;
    end;
  END;
end;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值