delphi-как узнать, к какому TPopupMenu принадлежит TMenuItem
должно быть достаточно просто, но я не вижу этого.
вы можете найти компонент, который был правой кнопкой мыши, чтобы отобразить всплывающее меню:
PopupMenu1.PopupComponent
но как вы узнаете всплывающее меню, которое содержит TMenuItem, который, в свою очередь, нажал на это меню?
чтобы упростить задачу, к примеру:
у меня есть серия меток, каждая с другим заголовком, и у меня есть всплывающее меню, которое назначено свойству PopupMenu каждого этикеток.
когда кто-то щелкает Правой Кнопкой Мыши одну из меток и вызывает всплывающее меню, а затем нажимает на MenuItem1, я хочу код:
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
MsgBox (Format ('The label right-clicked has the caption %', [xxxx.Caption ])) ;
end ;
что должно быть xxxx?
Реализован Ответа
спасибо обоим ответчикам. В итоге я получил вот что:--4-->
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 ответов
Я немного смущен вашим вопросом, но так как вы исключили все остальное, я могу только представить, что вы ищете TMenuItem.GetParentMenu
.
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;