如何动态生成多级弹出菜单,其数据文件存放在INT文件中。。。(100分)

F

fpsky

Unregistered / Unconfirmed
GUEST, unregistred user!
你说的事不是用ini文件中的数据生成多级弹出菜单呢?
感觉不困难。实验一下告诉你。
 
var item:tmenuitem;


begin
item:=tmenuitem.Create(self);
item.Caption:='sdfsd';
popupmenu1.Items.Add(item);
end;

'SDFSD '从INI 文件中读取吧

INI文件看DELPHI的帮助例子就有了
 
没有楼上说的这么简单,首先你先要设计INI文件如何表达菜单
然后才是问如何写代码啊
程序上无非就是用TINIFile类的方法,和TMenuitem.Add
 
对三楼进行补充——弹出菜单的单击事件。
for i:= 0 to popupmenu1.Items.Count-1 do
begin
popupmenu1.Items.OnClick := SetValue;//SetValue 为你自己需要的function或procedure
....
end;
 
用ini的话,只能生成两级菜单吧
因为只有 构件 section 和 string供你用啊
[sys]
string1=dfdf
string2=dfdfg
...
我以前用的就是ini,现在改成从数据库表里读了,生成n级都没问题
 
以前写的一个代码,贴给你看看[:)]

//------------------------------------------------------------------------------
// 司马华鹏
// 创建窗口
procedure TfrmMain.FormCreate(Sender: TObject);
var
mnuSection:TMenuItem;
mnuValue:TMenuItem;

lstSection:TStringList;
lstValues:TStringList;
i,j:integer;
strTmp:string;
begin
try
DropURLTarget1:=TDropURLTarget.Create(nil);
DropURLTarget1.OnDrop:=DropURLTarget1Drop;
DropURLTarget1.Register(cbAddr);

lstMenuItems:=TStringList.Create;
lstMenuItems.Add('http://www.lanseal.com.cn');

With TIniFile.Create(ExtractFilePath(GetAppName) + 'Menu.ini') do
try
lstSection:=TStringList.Create;
try
lstValues:=TStringList.Create;
try
ReadSections(lstSection);
for i:=0 to lstSection.Count-1 do
begin
mnuSection:= TMenuItem.Create(Self);
mnuSection.Caption :=lstSection.Strings;
mnuSection.ImageIndex:=6;
PopMenu.Items.Add(mnuSection); // 在菜单项下添加子菜单

ReadSectionValues(mnuSection.Caption,lstValues); // 读取子项目
for j:=0 to lstValues.Count-1 do
begin
mnuValue:=TMenuItem.Create(Self);
strTmp:=lstValues.Strings[j];
mnuValue.Caption:=Copy(strTmp,1,Pos('=',strTmp)-1);
mnuValue.ImageIndex:=6;
mnuValue.OnClick:=mnuUrlLansealClick; // 自定义菜单要响应的事件
mnuValue.Tag:=lstMenuItems.Count;
lstMenuItems.Add(Copy(strTmp,Pos('=',strTmp)+1,Length(strTmp)));
mnuSection.Add(mnuValue); // 在菜单项下添加子菜单
end;
end;
finally
lstValues.Free;
end;
finally
lstSection.Free;
end;
finally
Free;
end;
except

end;
end;
 
我觉得主要是你的存的INI文件要有规则。比如说存入的子菜单项的字符串应该加上一级的
菜单的名字。(存入=子菜单项的名字+CAPtion+上一级菜单的名字).
 
我遇到这样的问题,
在动态生成的二级菜单,没有了XP风格,
我使用了XPMenu控件,
这是怎么一回事?
 
http://www.playicq.com/datanew/示范如何动态产生menuitem,并动态指定各menuitem按下後的事件过程.zip
http://www.playicq.com/dispdocnew.php?t=27&id=3516
正和你意!
 
接受答案了.
 
顶部