procedure TForm1.ReadMenuStructureFile(mmMenu: TMainMenu; sFile: string;
iStartItem: integer);
var
f: TextFile; {file variable}
sStr: string; {line holder}
mnuLevel: array [0..7] of TMenuItem; {pointers to sub-menu owners}
mnuAddItem: TMenuItem; {variable to create menu item}
iPos: integer; {comment position}
mlLine: RMenuLine; {holds all line information}
iLineNo: integer; {line number for error messages}
begin
try
mnuLevel[0] := mmMenu.Items[iStartItem]; {set up first pointer}
iLineNo := 0;
AssignFile(f, sFile);
Reset(f); {open the MSF file}
try
repeat
Readln(f, sStr); {read a line of the MSF file}
Inc(iLineNo); {bump line number}
iPos := Pos(COMMENT, sStr);
if iPos > 0 then begin {if there is a comment}
Delete(sStr, iPos, Length(sStr)); {remove the comment}
end;
sStr := Trim(sStr); {trim leading/trailing spaces}
if Length(sStr) > 0 then begin {if not an empty line}
with mlLine do begin
{gather up all the fields from the line}
iLevel := StrToInt(strToken(sStr, CARET)); {menu level field}
sText := strToken(sStr, CARET); {menu text line field}
sBegin := strToken(sStr, CARET); {begin tag field}
sEnd := strToken(sStr, CARET); {end tag field}
iOnClick := StrToInt(strToken(sStr, CARET)); {OnClick # field}
AdjustTag(sBegin); {add CRLFs to tags if necessary}
AdjustTag(sEnd);
mnuAddItem := TMenuItem.Create(MainMenu1); {create new menu item}
mnuAddItem.Caption := sText; {add menu line to item}
mnuLevel[iLevel].Add(mnuAddItem); {add item to main menu}
mnuLevel[iLevel + 1] := mnuAddItem; {ptr for next level, if any}
if (Length(sBegin) > 0) or (Length(sEnd) > 0) then begin
slBeginTags.Add(sBegin); {add tags in pairs}
slEndTags.Add(sEnd);
mnuAddItem.Tag := slBeginTags.Count - 1; {index into string lists}
end;
case iOnClick of
0: mnuAddItem.OnClick := TagClick; {hook up OnClick event}
1: mnuAddItem.OnClick := DummyClick;
{add more events here, as required.}
end;
end;
end;
until EOF(f);
finally
CloseFile(f);
end;
except
on E:Exception do
ShowMessage(sFile + ', line ' + IntToStr(iLineNo) + ' - ' + E.Message);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var dongumenu,dongualtmenu,dongualtaltmenu :integer;
menu : TMainMenu;
Itemmenu,
ItemSubmenu,
ItemSubSubmenu : TMenuItem;
begin
menu := TMainMenu.Create(Application.MainForm);
for dongumenu:= 1 to 10 do
begin
Itemmenu := TMenuItem.Create(menu);
Itemmenu.Caption := 'menüm '+inttostr(dongumenu);
menu.Items.Add(Itemmenu);
for dongualtmenu:= 1 to 9 do
begin
ItemSubmenu := TMenuItem.Create(menu);
ItemSubmenu.Caption := 'menüm '+inttostr(dongumenu)+ '-'+inttostr(dongualtmenu);
Itemmenu.Add(ItemSubmenu);
for dongualtaltmenu:= 1 to 9 do
begin
ItemSubSubmenu := TMenuItem.Create(menu);
ItemSubSubmenu.Tag := (dongumenu*100)+(dongualtmenu*10)+dongualtaltmenu;
ItemSubSubmenu.Caption := 'menüm '+inttostr(ItemSubSubmenu.Tag);
ItemSubSubmenu.OnClick := MenuClick;
ItemSubmenu.Add(ItemSubSubmenu);
end;//dongualtaltmenu
end;//dongualtmenu
end;//dongumenu
end;
procedure TForm1.MenuClick(Sender: TObject);
begin
if Sender is TMenuItem then
Showmessage(inttostr(TMenuItem(Sender).Tag));
end;