2017-07-25 94 views
0

我正在使用C++ Builder XE4 32位VCL平台。我正在为Windows操作系统编写代码。如何确定哪些组件在C++ Builder中具有程序焦点

我有一个有很多组件的MainForm。当我按下键盘箭头键并触发表格的OnShortCut事件时,如何确定哪个组件具有程序焦点?

我有不同的行动,必须根据哪个组件具有焦点采取不同的行动。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled) 
{ 
    //determine which component has the focus. 
} 

回答

1

使用全球Screen->ActiveControl属性:

指示其控制目前拥有输入焦点在屏幕上。

阅读ActiveControl了解活动窗体中的哪个窗口控件对象当前接收到来自键盘的输入。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled) 
{ 
    TWinControl *ctrl = Screen->ActiveControl; 
    if (ctrl == Control1) 
    { 
     // do something... 
    } 
    else if (ctrl == Control2) 
    { 
     // do something else... 
    } 
    // and so on... 
} 

或者,您可以使用窗体本身ActiveControl属性:

指定具有焦点的窗体上的控件。

使用ActiveControl来获取或设置关注窗体的控件。只有一个控件可以在特定时间在应用程序中获得焦点。

如果表单没有焦点,则ActiveControl是表单上的控件,当表单接收焦点时将接收焦点。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled) 
{ 
    TWinControl *ctrl = this->ActiveControl; 
    if (ctrl == Control1) 
    { 
     // do something... 
    } 
    else if (ctrl == Control2) 
    { 
     // do something else... 
    } 
    // and so on... 
} 
相关问题