如何从一个文本文件生成动态菜单? 比如文本文件的内容为:主菜单项一
*子菜单项一
*子菜单项二
*子菜单项三
**子菜单子菜单项一
**子菜单子菜单项二
**子菜单子菜单项三*子菜单项一
*子菜单项二
**子菜单子菜单项一
**子菜单子菜单项二
*子菜单项三则生成三个主菜单,其中第一个主菜单的第三个子菜单还有下级菜单。
请各位前辈不吝赐教!
*子菜单项一
*子菜单项二
*子菜单项三
**子菜单子菜单项一
**子菜单子菜单项二
**子菜单子菜单项三*子菜单项一
*子菜单项二
**子菜单子菜单项一
**子菜单子菜单项二
*子菜单项三则生成三个主菜单,其中第一个主菜单的第三个子菜单还有下级菜单。
请各位前辈不吝赐教!
但代码如果也要文本的话,可能需要写调试器了
var
nid: TNotifyIconData;
NewItem,MnuExit,MnuLine,MnuCancel: TMenuItem;
SubNew1,SubNew2:TMenuItem;
ConIni:TIniFile;
ServiceCount:Integer;
i:integer;
StrCaption:string;
StrName:string;
ServiceTmp:TServiceCon;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.Wnd := Handle; // 主窗口句柄
nid.uID := 1; // 内部标识,可设为任意数
nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指
//nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指
nid.szTip := '服务控制程式***大象作品'; // 提示字符串
nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息
nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有?nbsp;
if not Shell_NotifyIcon(NIM_ADD, @nid) then
begin
showmessage('failed');
Application.Terminate;
end;
{将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
//初始化PopUpMenu
GetDir(0,StrAppDir);
SerViceNameStrLst:=TstringList.Create;
ConIni:=Tinifile.Create(StrAppDir+'\ServiceConTrol.ini');
ServiceCount:=ConIni.ReadInteger('profile','ServiceCount',0);
ServiceTmp:=TServiceCon.Create;
for i:=1 to ServiceCount do
begin
StrCaption:=ConIni.ReadString('Service_'+IntTostr(i),'ServiceCaption','未知');
StrName:=ConIni.ReadString('Service_'+IntTostr(i),'ServiceName','');
NewItem:= TMenuItem.Create(self);
SubNew1:=TMenuItem.Create(self);
SubNew2:=TMenuItem.Create(self); if not ServiceTmp.InitService(strName) then //检测服务的状态
subNew2.Enabled:=false //服务没有启动
else
subNew1.Enabled:=false; //服务已经启动
SubNew1.Caption:='启动';
SubNew2.OnClick:=form1.MnuStopService; //设定停止菜单的点击事件
SubNew2.Caption:='停止';
subnew1.OnClick:=form1.MnuStartService; //设定启动菜单的点击事件
NewItem.Caption:=StrCaption;
PopupMenu1.Items.Add(NewItem);
ServiceNameStrLst.Add(strName);
PopUpMenu1.Items[i-1].Add(subNew2);
PopUpMenu1.Items[i-1].Add(subNew1);
end;
MnuLine:=TMenuItem.Create(self);
MnuLine.Caption:='-';
PopupMenu1.Items.Add(MnuLine);
MnuExit:=TMenuItem.Create(self);
MnuExit.Caption:='退出';
PopUpMenu1.Items.Add(MnuExit);
MnuExit.OnClick:=Form1.MnuExitClick;
MnuCancel:=TmenuItem.Create(self);
MnuCancel.Caption:='取消';
PopupMenu1.Items.Add(MnuCancel);
//ShowMessage(Inttostr(Popupmenu1.Items[0].Count));
ConIni.Free;end;
file begain
[profile]
ServiceCount=4
[Service_1]
ServiceName=Broadcast_chi
ServiceCaption=电子报刊
[Service_2]
ServiceName=Broadcast_CHI_MPEG
ServiceCaption=流媒体
[Service_3]
ServiceName=Serv-U
ServiceCaption=FTP服务器
[Service_4]
ServiceName=Apache
ServiceCaption=Web服务器
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ActnList;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
BtnCreateMainMenu: TButton;
btnCreateSubMenu: TButton;
ActionList1: TActionList;
Action1: TAction;
btnClearAllMenu: TButton;
Button1: TButton;
Button2: TButton;
procedure BtnCreateMainMenuClick(Sender: TObject);
procedure Action1Execute(Sender: TObject);
procedure btnCreateSubMenuClick(Sender: TObject);
procedure btnClearAllMenuClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClick(Sender: TObject);
private
{ Private declarations }
i,j:integer;
curMenuItem:TMenuItem;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure xxk(content:string);
begin
showMessage(content);
end;procedure TForm1.BtnCreateMainMenuClick(Sender: TObject);
var
s:string;
menuItem:TMenuItem;
begin
btnCreateSubMenu.Enabled:=true;
inc(i);
s:='主菜单__'+intToStr(i);
menuItem:=TMenuItem.Create(MainMenu1);
menuItem.Caption:=s;
MainMenu1.Items.Add(menuItem);
curMenuItem:=menuItem;end;procedure TForm1.Action1Execute(Sender: TObject);
var
menuItem:TMenuItem;
begin
if Sender is TMenuItem then
begin
menuItem:=TMenuItem(Sender);
showMessage(menuItem.Caption+' name:'+menuItem.Name);
end;
end;procedure TForm1.btnCreateSubMenuClick(Sender: TObject);
var
s:string;
menuItem:TMenuItem;
event:TNotifyEvent;
begin
inc(j);
s:=curMenuItem.Caption;
s:=s+'_子菜单_'+intToStr(j); menuItem:=TMenuItem.Create(curMenuItem);
menuItem.Caption:=s;
menuItem.OnClick:=action1.OnExecute;
curMenuItem.Add(menuItem);end;procedure TForm1.btnClearAllMenuClick(Sender: TObject);
begin
mainMenu1.Items.Clear;
btnCreateSubMenu.Enabled:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=mainMenu1.Items.Count;
showMessage(intToStr(i));
end;procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
i,j,n,n1:integer;
begin
n:=mainMenu1.Items.Count;
for i:=0 to n-1 do
begin
s:=s+#13+mainMenu1.Items[i].Caption;
n1:=mainMenu1.Items[i].Count; for j:=0 to n1-1 do
begin
s:=s+#13+' '+mainMenu1.Items[i].Items[j].Caption;
end; end;
showMessage(s);
end;procedure TForm1.FormClick(Sender: TObject);
begin
showMessage('clicked');
end;end.