Должно быть достаточно просто, но я его не вижу.
Вы можете найти компонент, на который щелкнули правой кнопкой мыши, чтобы отобразить всплывающее меню с:
PopupMenu1.PopupComponent
, ноКак узнать, какое всплывающее меню содержит TMenuItem, который, в свою очередь, щелкнул по этому меню?
Чтобы упростить задачу для примера:
У меня есть серия меток, каждая сдругой заголовок, и у меня есть всплывающее меню, которое назначается свойству PopupMenu каждой из меток.
Когда кто-то щелкает правой кнопкой мыши одну из меток и вызывает всплывающее меню, а затем нажимает на MenuItem1Я хочу код:
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
MsgBox (Format ('The label right-clicked has the caption %', [xxxx.Caption ])) ;
end ;
Каким должен быть хххх?
Реализованный ответ
Спасибо обоим респондентам.В итоге я получил следующее:
procedure TForm1.MenuItem1Click(Sender: TObject);
var
AParentMenu : TMenu ;
AComponent : TComponent ;
ALabel : TLabel ;
begin
AParentMenu := TMenuItem (Sender).GetParentMenu ;
AComponent := TPopupMenu (AParentMenu).PopupComponent ;
ALabel := TLabel (AComponent) ;
MsgBox (Format ('The label right-clicked has the caption %', [ALabel.Caption ])) ;
end ;
, которое также запрашивает, какой TMenuItem был задействован, и, следовательно, дает мне фрагмент кода, который я могу вставить в другие обработчики OnClick с меньшими изменениями.