У меня есть управление всплывающим меню на форме (grr, я, скорее всего, сделаю его динамичным - ненавижу статические инструменты). У него есть пункт с SubMenu. SubMenu имеет три пункта меню (класс TMenuItem).
Мне нужно проверить, принимая параметр Sender в операторе if..then при каждом вызове процедуры элементом с помощью SubMenu или элементами SubMenu.
Я пробовал разные варианты с типизацией и операциями суперкласса, но безуспешно. Я думаю, что возможно что-то вроде этого:
if FindControl(MenuItemWithSubMenu.Handle) = TControl(Sender as TComponent).Parent then ...
но, конечно, с правильными типами и командами ..
Любые идеи приветствуются.
Дополнительная информация по запросу сообщества:
Код itsef (если я просто проверяю по имени компонента prop) выглядит следующим образом:
procedure TForm1.xClick(Sender: TObject); // procedure that has attached onClick from PopupActionBar1 Items
begin
if ((TComponent(Sender).Name = 'Unloadresources1') or // PopupActionBar1.Items[3]
(TComponent(Sender).Name = 'VKPCache11') or // PopupActionBar1.Items[3].Items[0]
(TComponent(Sender).Name = 'VKPCache21') or // PopupActionBar1.Items[3].Items[1]
(TComponent(Sender).Name = 'AllCache31') or // PopupActionBar1.Items[3].Items[2]
(ActLoadVal = 2)) and (PopupActionBar1.Items[3].Caption = 'Delete VKP Cache') then begin .. end;
end;
Проблема в том, что это слабый подход и требует дополнительного кодирования, если пользователь программы хочет добавить / перетащить / вставить / вставить компонент, элемент управления или объект во время выполнения. Таким образом, сама программа автоматически выполняла бы всю работу на моем месте - знаю, что и когда вызывать:)
On (статическая) Form1 является (статической) PopupActionBar1. У него есть четыре предмета. Четвертый пункт имеет SubMenu - с тремя пунктами.
И четвертый элемент с элементами подменю (PopupActionBar1.Items [3]) и три элемента подменю (PopupActionBar1.Items [3] .Items [0 .. 2] Для обработчиков событий OnClick задана процедура, содержащая записанное выражение If..Then выше.
Задача - путем выявления параметра Sender и использования его возможностей ООП - проверьте, была ли вызвана процедура из PopupActionBar1.Items [3] Пункт меню или его элементы SubMenu (PopupActionBar1.Items [3] .Items [0] или PopupActionBar1.Items [3] .Items [1] или PopupActionBar1.Items [3] .Items [2]).
Я пробовал различный синтаксис ... также пробовал манипуляции с типами с TControl, TWinControl, TComponent .. (не использовать TObject, если у него нет Parent (исключая OLE) ..