在 D7 中的主菜单和弹出式菜单是用 TActionMainMenuBar 做的,
用 TActionMainMenuBar 做主菜单好做,但用做弹出式菜单怎么做
才能达到像 D7 一样的效果?
var
xx : TComustActionPopup;
begin
xx := TComustActionPopup.create;
xx.actionclient := ActionMainMenuBar.actionclient.items[0].contentitem ;
xx.popup(0,0);
xx.closemenu;
xx.free;
end;以上代码是我回忆写的,可以有点语法错误,但确实可以弹出菜单,但,效果就没有
D7 中的好,不知为什么?
用 TActionMainMenuBar 做主菜单好做,但用做弹出式菜单怎么做
才能达到像 D7 一样的效果?
var
xx : TComustActionPopup;
begin
xx := TComustActionPopup.create;
xx.actionclient := ActionMainMenuBar.actionclient.items[0].contentitem ;
xx.popup(0,0);
xx.closemenu;
xx.free;
end;以上代码是我回忆写的,可以有点语法错误,但确实可以弹出菜单,但,效果就没有
D7 中的好,不知为什么?
var
XPPopupMenu:TCustomActionPopupMenu;然后在Form1的OnCreate中写下列代码
procedure TForm1.OnCreate(Sender:TObject);
begin
MenuPopupClass:=TCustomActionPopupMenu; //我看到Delphi的帮助说要先定义一个TCustomActionPopupMenu的子类,然后把这个子类作为程序的弹出菜单的模板类
XPPopupMenu:=TCustomActionPopupMenu.Create(Self);
//标注一
with XPPopupMenu do
begin
//标注二
ActionClient:=ActionManager1.ActionBars[0];
end;
end;然后在Form1的OnMouseDown事件中写如下代码
...
begin
if Button=mbRight then
XPPopupMenu.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;这样,每次运行程序的时候当在Form1按下鼠标右键的时候就可以弹出一个菜单。但有如下问题:
1.弹出的菜单的布局居然是横向的,即使我在上面程序的标注二处定义了XPPopupMenu的Orientation属性也一样;
2.我上面的程序中只是把程序的弹出菜单模板定义为TCustomActionPopupMenu类,并没有设置窗口的PopupMenu属性。但即使我在标注一处设置了这个属性,发现还是需要在窗口的OnMouseDown事件中写代码;你按照我说的方法,看看,我在试验试验!
我现在碰到的问题不是菜单模着放,因为 ActionClient:=ActionManager1.ActionBars[0] 时,只能取出菜单条上的项目,
我要达到的目的是像 delphi 7 弹出菜单一样,
xx.actionclient := ActionMainMenuBar.actionclient.items[0].contentitem
或者
xx.actionclient := ActionMainMenuBar.actionclient.items[0].ActionClient[0]
这样就可以像 D 7 一样弹出菜单,
但有一点不好的就是,用我的这种方法弹出的菜单有边框,和D 7 的菜单比起来效果差多了.
不知如何解决
XX.ActionClient:=ActionMainMenuBar.ActionClient.Items[0].ContextItem将显示E1到E5,
如果使用代码
XX.ActionClient:=ActionMainMenuBar.ActionClient.Items[0].ActionClient[0]将显示A1到A3不过你这种建立XP Style Popup Menu的方法有点不符合常规,我看到TCustomActionPopupMenu中介绍了制作XP Style Popup Menu的方法,不过我用了以后好象有点问题,因为我弹不出菜单我再看看,正好这几天正在做这个