首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德尔福--如何找出TPopupMenu a TMenuItem属于哪个

德尔福--如何找出TPopupMenu a TMenuItem属于哪个
EN

Stack Overflow用户
提问于 2011-05-28 09:53:19
回答 2查看 10.9K关注 0票数 11

应该很简单但我看不见。

您可以找到正确单击以显示弹出菜单的组件:

代码语言:javascript
复制
PopupMenu1.PopupComponent

但是,如何找到包含TMenuItem的弹出菜单,然后单击该菜单?

若要将问题简化为示例:

我有一系列标签,每个标签都有不同的标题,还有一个弹出式菜单,分配给每个标签的PopupMenu属性。

当有人右键单击其中一个标签并弹出弹出式菜单,然后单击MenuItem1时,我要编写代码:

代码语言:javascript
复制
procedure TForm1.MenuItem1Click(Sender: TObject);

begin
MsgBox (Format ('The label right-clicked has the caption %', [xxxx.Caption ])) ;
end ;

xxxx应该是什么?

实现了应答

感谢两位受访者。我最后得到的结果是:

代码语言:javascript
复制
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处理程序中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-28 10:10:18

我对你的问题有点困惑,但既然你排除了其他的一切,我只能想象你在寻找TMenuItem.GetParentMenu

票数 10
EN

Stack Overflow用户

发布于 2011-05-28 10:57:20

代码语言:javascript
复制
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;
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6160888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档