我正在使用C ++ Builder XE4 32位VCL平台。我正在为Windows操作系统编写。
我有一个包含很多组件的MainForm。当我按下键盘箭头键并触发Form OnShortCut
事件时,如何确定哪个组件具有程序焦点?
我有不同的行动,必须根据哪个组件有焦点。
void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled)
{
//determine which component has the focus.
}
答案 0 :(得分: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...
}