delphi - как узнать, к какому TPopupMenu принадлежит TMenuItem? - PullRequest
9 голосов
/ 28 мая 2011

Должно быть достаточно просто, но я его не вижу.

Вы можете найти компонент, на который щелкнули правой кнопкой мыши, чтобы отобразить всплывающее меню с:

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 с меньшими изменениями.

Ответы [ 2 ]

9 голосов
/ 28 мая 2011

Я немного смущен вашим вопросом, но, поскольку вы исключили все остальное, я могу только представить, что вы ищете TMenuItem.GetParentMenu.

6 голосов
/ 28 мая 2011
procedure TForm1.MenuItem1Click(Sender: TObject);
var pop:TPopupMenu;
    lbl:TLabel;
begin
  // Firstly get parent TPopupMenu (needs casting from TMenu) 
  pop:= TPopupMenu(MenuItem1.GetParentMenu()); 
  // pop.PopupComponent is the "source" control, just cast it to Tlabel
  lbl:= TLabel(pop.PopupComponent);            

  ShowMessage(Format('The label right-clicked has the caption %s',[lbl.Caption]));
end;
...