Как определить, какой компонент имеет фокус программы в C++Builder
Я использую C++Builder XE4 32-битную платформу VCL. Я пишу для ОС Windows.
У меня есть 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...
}