如何在 C++Builder 中确定哪个组件具有程序焦点



我正在使用C++Builder XE4 32位VCL平台。我正在为Windows操作系统写作。

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

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

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

使用全局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...
}

最新更新