• 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 自定义的消息。

  • 相关阅读:
    正则替换 html
    黎曼积分:采用任意无限分割时
    A field guide to algebra,theorem 1.1.3
    $\mathbf{R}$上开集的构造
    陶哲轩实分析引理18.2.5
    A field guide to algebra,theorem 1.1.3
    陶哲轩实分析引理18.2.5
    $\mathbf{R}$上开集的构造
    关于勒贝格外测度的一条等式
    Some remarks on definition 1.1.1,A field guide to algebra
  • 原文地址:https://www.cnblogs.com/songr/p/5069503.html
Copyright © 2020-2023  润新知