Как определить, какой компонент имеет фокус программы в 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...
}
Другие вопросы по тегам