加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何检测弹出菜单子菜单的弹出窗口(以及如何动态填充

发布时间:2020-12-15 09:37:38 所属栏目:大数据 来源:网络整理
导读:我有一个弹出菜单,其中包含几个菜单项,其中一个可以有子项.此条目右侧有一个小箭头,当您将鼠标悬停在其上时,将打开一个子菜单(不单击).现在我想在运行时填充这个子菜单,但前提是用户实际打开它.如果用户从未打开子菜单,则它将为空(可能包含占位符).我怎么能
我有一个弹出菜单,其中包含几个菜单项,其中一个可以有子项.此条目右侧有一个小箭头,当您将鼠标悬停在其上时,将打开一个子菜单(不单击).现在我想在运行时填充这个子菜单,但前提是用户实际打开它.如果用户从未打开子菜单,则它将为空(可能包含占位符).我怎么能做到这一点?甚至可以在弹出菜单可见时修改它?

谢谢你的帮助!

解决方法

标准菜单或上下文(弹出)菜单中的子菜单之间没有区别:如果菜单项附有子菜单,则其OnClick事件将在子菜单显示之前触发(请注意,您无需单击它即可显示),在该事件处理程序中,您可以修改子菜单(设置现有项的属性,或添加新项/删除现有项).

一些关于动态添加和删除项目的演示代码:

procedure TForm1.FormCreate(Sender: TObject);
var
  Popup: TPopupMenu;
  Item,SubItem: TMenuItem;
begin
  Popup := TPopupMenu.Create(Self);
  PopupMenu := Popup;
  Item := TMenuItem.Create(Popup);
  Item.Caption := 'Test submenu';
  Item.OnClick := PopupClick;
  Popup.Items.Add(Item);

  SubItem := TMenuItem.Create(Item);
  SubItem.Caption := 'dummy';
  Item.Add(SubItem);
end;

procedure TForm1.PopupClick(Sender: TObject);
var
  SubmenuItem,Item: TMenuItem;
begin
  SubmenuItem := Sender as TMenuItem;
  // delete old items (leave at least one to keep the submenu)
  while SubmenuItem.Count > 1 do
    SubmenuItem.Items[SubmenuItem.Count - 1].Free;
  // create new items
  while SubmenuItem.Count < 3 do begin
    Item := TMenuItem.Create(SubmenuItem);
    Item.Caption := Format('new item created %d',[GetTickCount]);
    SubmenuItem.Add(Item);
  end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读