自动生成菜单项问题请教 ( 积分: 10 )

  • 主题发起人 主题发起人 fongling5355
  • 开始时间 开始时间
F

fongling5355

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem:TMenuItem;
begin
NewItem:=TMenuItem.Create(MainMenu1);
NewItem.Caption:='test';
NewItem.OnClick:=MyNewItemClick;
MainMenu1.Items[0].Insert(MainMenu1.Items[0].Count,
NewItem);
end;
procedure TForm1.MyNewItemClick(sender: TObject);
begin
Memo1.Lines.LoadFromFile(
(Sender as TMenuItem).Caption);
end;

我使用自动生成菜单项, 为什么会出现: Menu index out range.
 
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem:TMenuItem;
begin
NewItem:=TMenuItem.Create(MainMenu1);
NewItem.Caption:='test';
NewItem.OnClick:=MyNewItemClick;
MainMenu1.Items[0].Insert(MainMenu1.Items[0].Count,
NewItem);
end;
procedure TForm1.MyNewItemClick(sender: TObject);
begin
Memo1.Lines.LoadFromFile(
(Sender as TMenuItem).Caption);
end;

我使用自动生成菜单项, 为什么会出现: Menu index out range.
 
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem:TMenuItem;
NewMainItem: TMenuItem;
begin
NewMainItem :=TMenuItem.Create(MainMenu1)
//新建主菜单项
NewMainItem.Caption:='NewMainItem';
MainMenu1.Items.Add(NewMainItem) ;

NewItem:=TMenuItem.Create(MainMenu1.Items[0]);//新建副菜单项
NewItem.Caption:='test';
NewItem.OnClick:=MyNewItemClick;
MainMenu1.Items[0].Insert(MainMenu1.Items.Count-1,
NewItem);
end;
 
我测试了,开始和你一样,后在菜单中手工加入第一级菜单,如:文件。
程序正常,可以添加“TEST”菜单栏。
 
我是用在控件设计上, 该如何是好?
 
给你一段代码,我程序中用的。希望对你有些用:

//根据用户功能表创建菜单;
FOR I :=0 TO SDSmenu.RecordCount-1 DO
begin
if (SDSmenu.FieldBYNAME('menu_type').ASINTEGER=1) then
begin
menu:=TMenuItem.Create(frm_main);
menu.Caption:=trim(SDSmenu.FieldValues['menu_name']);
frm_main.mm1.Items.Insert(frm_main.mm1.Items.Count- 2,menu);//确定新菜单的位置;;
end;
SDSmenu.Next;
end;
SDSmenu.First;
//结束主菜单,开始子菜单;
FOR I:=0 TO SDSmenu.RecordCount-1 DO
begin
if (SDSmenu.FieldBYNAME('menu_type').ASINTEGER=0) then
BEGIN
menu:=TMenuItem.Create(frm_main);
menu.Caption:=trim(SDSmenu.FieldValues['menu_name']);
for m :=0 to frm_main.mm1.Items.count-1 do
if (frm_main.mm1.Items[m].caption=TRIM (SDSmenu.FieldBYNAME('menu_par_name').AsString)) then
frm_main.mm1.Items[m].Add(menu);

END;
//¸ø²Ëµ¥¸³Öµactionʼþ;
for j := 0 to frm_main.actmgr_bar.ActionCount - 1 do // Iterate
begin
if (TAction(frm_main.actmgr_bar.Actions[j])).caption=menu.Caption then
menu.Action:=frm_main.actmgr_bar.Actions[j]
end;

for j := 0 to frm_main.actmgr_bar.ActionCount - 1 do // Iterate
if (TAction(frm_main.actmgr_bar.Actions[j]).Caption=trim(SDSmenu.FieldValues['menu_name'])) then
begin
BarItem.Action:=frm_main.actmgr_bar.Actions[j];
end;
for j := 0 to frm_main.actmgr_bar.ActionCount - 1 do // Iterate
if (TAction(frm_main.actmgr_bar.Actions[j]).Caption=trim(SDSmenu.FieldValues['menu_name'])) then
begin
if (trim(SDSmenu.FieldValues['menu_ico'])<>'') then
begin
CurrentIcon:=TIcon.Create;
//&amp;micro;&amp;frac14;&amp;Egrave;&amp;euml;&amp;Iacute;&amp;frac14;±ê;
CurrentIcon.LoadFromFile(GetCurrentDir+'/'+trim(SDSmenu.FieldValues['menu_ico']));
datamodule1.image16.AddIcon(CurrentIcon);
datamodule1.il1.AddIcon(CurrentIcon);
datamodule1.il2.AddIcon(CurrentIcon);
//&amp;Eacute;è&amp;Ouml;&amp;Atilde;&amp;para;&amp;macr;×÷&amp;sup2;&amp;cent;&amp;sup1;&amp;Oslash;&amp;Aacute;&amp;ordf;;
TAction(frm_main.actmgr_bar.Actions[j]).ImageIndex:=datamodule1.image16.Count-1;//&amp;Eacute;è&amp;Ouml;&amp;Atilde;&amp;micro;&amp;frac14;&amp;ordm;&amp;frac12;&amp;sup1;¤&amp;frac34;&amp;szlig;&amp;micro;&amp;Auml;&amp;Iacute;&amp;frac14;±ê&amp;pound;&amp;raquo;
BarItem.LargeImageIndex:= datamodule1.il1.Count-1;
BarItem.SmallImageIndex :=datamodule1.il2.Count-1;
//&amp;Eacute;è&amp;Ouml;&amp;Atilde;&amp;sup2;&amp;Euml;&amp;micro;&amp;yen;&amp;Iacute;&amp;frac14;±ê;
menu.ImageIndex:=datamodule1.il2.Count-1;//&amp;Eacute;è&amp;Ouml;&amp;Atilde;&amp;sup2;&amp;Euml;&amp;micro;&amp;yen;&amp;micro;&amp;Auml;&amp;Iacute;&amp;frac14;±ê;
end;
end;
SDSmenu.Next;
END;
end;
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
482
import
I
I
回复
0
查看
739
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
700
import
I
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部