У меня есть меню всплывающего меню в форме (grr, я скорее всего сделаю его динамичным - ненавижу статические инструменты). У него есть Item with SubMenu. SubMenu имеет три элемента меню (класс TMenuItem).TComponet/любой другой суперкласс и его обнаружение дочерних элементов
Мне нужно проверить, взяв параметр Sender в if..then, всякий раз, когда процедура была вызвана элементом с SubMenu или элементами SubMenu.
Я пробовал разные отклонения с приведением типов и суперклассами, но не повезло. Я думаю, что можно что-то вроде этого:
if FindControl(MenuItemWithSubMenu.Handle) = TControl(Sender as TComponent).Parent then ...
, но, конечно же, с правильной типажей и команды ..
Любые идеи оценили.
Дополнительная информация по запросу сообщества:
Кодекса itsef (если я просто проверить с помощью компонента имя реквизита) выглядит следующим образом:
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;
Проблема заключается в том, что это путь слабого подхода и требует дополнительного кодирования, если пользователь программы хочет добавить/drag'n'drop/insert компонент или элемент управления или объект во время выполнения. Таким образом, сама программа автоматически прекратила бы работу на моем месте - знайте, что звонить и когда :)
Вкл. (Статический) Форма1 является (статическим) PopupActionBar1. Он имеет четыре элемента. Четвертый элемент имеет SubMenu - с тремя элементами.
Оба четвертого элемента с элементами подменю (PopupActionBar1.Items [3]) и три элемента подменю (PopupActionBar1.Items [3] .Items [0 .. 2] Обработчики событий OnClick установлены в процедуру, содержащую оператор If..Then написано выше.
Задача - путем определения параметра Sender и использования его возможностей OOP - проверьте, вызвана ли процедура из PopupActionBar1.Items [3] Элемент меню или его элементы SubMenu (PopupActionBar1.Items [3] .Items [0] или PopupActionBar1.Items [3] .Интемы [1] или PopupActionBar1.Items [3] .Интемы [2]).
Я пробовал различный синтаксис ... также пробовал манипуляции с приведением типов с помощью TControl, TWinControl, TComponent .. (без использования TObject это не имеет родителя (за исключением OLE).
В каком событии находится ваш код? Также я не уверен, чего вы пытаетесь достичь. Не могли бы вы рассказать? –
Каким образом? Код snipp? Диаграмма? –
Пожалуйста, добавьте более сложный код, поскольку ваш вопрос кажется (на основе обсуждения под ответом Сертака) намного сложнее, чем он сформулирован сейчас. –