怎么这样加入菜单会出错!!!!!!(100分)

  • 主题发起人 主题发起人 paf
  • 开始时间 开始时间
P

paf

Unregistered / Unconfirmed
GUEST, unregistred user!
Item := TMenuItem.Create(nil);
Item.Caption := '测试';
PopupMenu1.Items.Add(Item); //PoP菜单
MnuTools.add(item); // MainMenu 里的一个菜单

我动态的加入菜单,"MnuTools"是一个TMenuItem变量!
如果把其中一行代码 "MnuTools.add(item);" 或 "PopupMenu1.Items.Add(Item);"
的代码册除!就不会出错,如果两个都有的话就会弹出“Menu inserted twice.”
这样的错误,好像是说菜单加入两次的意思。我现在就是想在“PopupMenu1”和
"MnuTools" 中加入同样的内容啊!

我也试了一下先把菜单加入“PopupMenu1”中再使用下面语句
MnuTools:=PopupMenu1.Items;
但,“MnuTools”下不会出现和"PoPupMenu1"同样的菜单,没有一点的变化!
怎么办!

请大家帮帮忙!多谢!

 
动态生成菜单:
PopUpitem:=TMenuItem
PopUpitem:=TMenuItem.Create(Self);
PopupItem.Caption:='XXX';
PopUpItem.GroupIndex:=0;
PopUpItem.OnClick:=OcbPopupHandler;
Mnupop.Items.Add(PopupItem);
需要在type里再声明一次。
调用的例子如下:
procedure TFrmMain.OcbPopupHandler(Sender: TObject);
begin
if (sender as TMenuitem).GroupIndex=0 then
begin
....
end;
end;
MnuTools 我不知道你这个是定义在哪里的,你把代码详细贴一下吧。
 
帮助里面应该有例子
 
"MnuTools" 在type里声明了的!

如果
Item := TMenuItem.Create(nil);
Item.Caption := '测试';
PopupMenu1.Items.Add(Item); //PoP菜单
PopupMenu2.Items.Add(Item); //PoP菜单

也会出错
 
你必须Create两次才能Add两次。多加两行代码而已。
 
Item只有一个,不能在两个地方出现
 
我是有好多菜单要创建啊,如果每一个都要创建两次那不是要很多代码!

有解决方法吗?
 
有一个办法可以让你只用做一个MainMenu,把MainMenu里的一项当作PopupMenu用:

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pt: TPoint;
begin
if Button = mbRight then
begin
GetCursorPos(pt);
TrackPopupMenu(MnuTools.Handle, TPM_LEFTBUTTON or TPM_LEFTALIGN,
pt.X, pt.Y, 0, Handle, nil);
end;
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
D
回复
0
查看
664
DelphiTeacher的专栏
D
D
回复
0
查看
744
DelphiTeacher的专栏
D
后退
顶部