Два объекта TMemo совместно используют одно TPopupMenu - PullRequest
0 голосов
/ 26 октября 2019

У меня есть TForm с двумя TMemo объектами и одним TPopupMenu. Оба TMemo s используют один и тот же TPopupMenu.

Во всплывающем меню есть один пункт для «очистки» заметки, используя TAction.

Мой вопрос: при нажатии на пункт меню на одном из TMemo s, как я могу выяснить, какой TMemo был тот, который отображал TPopupMenu?

У меня есть следующий код в функции выполнения TAction:

TAction* action = dynamic_cast<TAction*>(Sender);

TMenuItem* item = dynamic_cast<TMenuItem*>(action->ActionComponent);
if(item)
{
    if(dynamic_cast<TMemo*>(item->Owner))
    {
        dynamic_cast<TMemo*>(item->Owner) -> Clear();
    }
}

Но владелец TMenuItem не является TMemo.

Любые намеки? Я надеюсь избежать использования двух разных TPopupMenu s.

1 Ответ

1 голос
/ 26 октября 2019

Вам необходимо использовать свойство TPopupMenu::PopupComponent, чтобы узнать, какой TMemo вызвал меню:

TMemo *memo = dynamic_cast<TMemo*>(PopupMenu1->PopupComponent);
if (memo)
    memo->Clear();

Или, если вы хотите обнаружить TPopupMenu, с которым TMenuItem связан:

TAction* action = static_cast<TAction*>(Sender);

TMenuItem* item = dynamic_cast<TMenuItem*>(action->ActionComponent);
if (item)
{
    TPopupMenu *popup = dynamic_cast<TPopupMenu*>(item->GetParentMenu());
    if (popup)
    {
        TMemo *memo = dynamic_cast<TMemo*>(popup->PopupComponent);
        if (memo)
            memo->Clear();
    }
}
...