Как привести к TMenuItem в методе TActions Execute?
У меня есть несколько связанных TMenuItems в приложении CodeGear C++ VCL.
Каждый TMenuItem связан с одним и тем же действием (TAction).
При щелчке по MenuItem запускается действие (это метод execute).
Мне нужно будет как-то привести параметр Sender в функции OnExecute действий, чтобы выяснить, какой пункт меню был нажат.
В настоящее время у меня есть что-то вроде этого
void __fastcall TMoleculixDesktopMainUnit::openMoleculeSelectionFormAExecute(TObject *Sender)
{
//User selected a menuitem under Molecules Menu
TAction* anItem = dynamic_cast<TAction*>(Sender);
//AminoAcidsMI is a TMenuItem
if(AminoAcidsMI == dynamic_cast<TMenuItem*>(anItem->Owner))
{
//Open molecule search form with aminoacids
MLog()<<"Looking for Amino Acids..";
}
}
Но вышеперечисленное не работает. Владельцем действий НЕ является MenuItem.
1 ответ
Решение
Использовать TAction::ActionComponent
свойство, которое указывает компонент, вызвавший действие.
void __fastcall TMoleculixDesktopMainUnit::openMoleculeSelectionFormAExecute(TObject *Sender)
{
//User selected a menuitem under Molecules Menu
TAction* anItem = dynamic_cast<TAction*>(Sender);
if (!anItem) return;
AminoAcidsMI == dynamic_cast<TMenuItem*>(anItem->ActionComponent);
if (AminoAcidsMI)
{
//Open molecule search form with aminoacids
MLog()<<"Looking for Amino Acids..";
}
}