• BCB 如何拦截TAB键消息


    最近项目中一个需求,按下Tab键,按照指定的顺序进行跳转。

    在实现的过程中发现,Tab按下的时候,会让当前控件失去焦点。并跳转到其他可焦点控件 例如 TEdit,TButton 等。

    究其原理,是因为按下Tab,由于某种机制(应该是windows 或者是 BCB 自己 响应系统热键 ,这里没有结论,后续继续研究)导致控件跳转。

    那么问题定位在:如何拦截这个控件按下Tab 的消息处理。

    起初尝试了各种 windowsProc 进行拦截,并没有用。

    后来发现,在Form里,有一个Bug级别的键盘响应事件。OnShortCut

    其中,AdvStringGrid1 就是,我想拦截Tab热键的控件。

    见下面代码

    void __fastcall TForm1::FormShortCut(TWMKey &Msg, bool &Handled)
    {
        if (Msg.CharCode == VK_TAB
            && ActiveControl != NULL
            &&  ActiveControl->Name == "AdvStringGrid1")
        {
            Handled = true; //当设置为True的时候,消息将作为快捷拦下来,不再继续派发。
        }
    
    }

    另外关于这个函数还有下面特征

    1,任何键盘按下,都会响应。而且比窗体消息优先响应。

    2,如果有Form 叠加 (Form1 贴在Form2 上面),最底层的Form才会接收到ShortCut

    3,Msg 参数的Msg 属性,会响应2次,一次是 0x00BD , 一次是 0XB016 均在MSDN查不到是什么消息。估计是VCL 自定义的消息。

  • 相关阅读:
    将mysql数据库的数据导出做成excl表格通过邮件发送附件发给指定人
    监听服务端口及邮件报警脚本
    ubantu下docker安装
    python 邮件报警
    3、.net core 部署到IIS
    1、Ubuntu 16.04 安装.net core
    解决asp.net mvc的跨域请求问题
    Jquery常用方法汇总(转)
    mongodb Helper
    数据库CTE递归查询
  • 原文地址:https://www.cnblogs.com/songr/p/5069503.html
Copyright © 2020-2023  润新知