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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |