var NewItem: TMenuItem; I : integer; begin NewItem := TMenuItem.Create(Self); NewItem.Caption := '-';
for I := 0 to Screen.FormCount-1 do begin NewItem := TMenuItem.Create(Self); NewItem.Caption := Screen.Forms[I].Name
procedure TFrmMain.SetupMenu; var MenuItem: TMenuItem; ParentMenu: TComponent; i, MenuPosition: Integer; begin for i := 0 to AddonMenu.Count - 1 do begin MenuItem := TMenuItem.Create(Self); {create an item on the fly} with MenuItem do begin {1=Name,Parent,Caption,Hint,Shortcut,AppTag,BPLName,Index} Name := UserTitle(AddonMenu[i], ',', 1); Caption := UserTitle(AddonMenu[i], ',', 3); Hint := UserTitle(AddonMenu[i], ',', 4); if UserTitle(AddonMenu[i], ',', 5) <> EmptyStr then Shortcut := TextToShortCut(UserTitle(AddonMenu[i], ',', 5)); Enabled := True; Visible := True; Tag := i; { if UserTitle(AddonMenu[i], ',', 2)='pmSend' then OnClick := btnToolBarClick else } OnClick := MenuOnClick; {assign OnClick event} if UserTitle(AddonMenu[i], ',', 2) = EmptyStr then ParentMenu := nil else ParentMenu := Self.FindComponent(UserTitle(AddonMenu[i], ',', 2)); end; MenuPosition:=StrToIntDef(UserTitle(AddonMenu[i], ',', 8),0); if ParentMenu = nil then begin MenuPosition:= mnuMain.Items.Count - MenuPosition; if MenuPosition<0 then MenuPosition:= mnuMain.Items.Count; mnuMain.Items.Insert(MenuPosition , MenuItem); end else begin if ParentMenu is TMainMenu then begin MenuPosition:= TMainMenu(ParentMenu).Items.Count - MenuPosition; if MenuPosition<0 then MenuPosition:= TMainMenu(ParentMenu).Items.Count; TMainMenu(ParentMenu).Items.Insert(MenuPosition , MenuItem); end else if ParentMenu is TPopupMenu then begin MenuPosition:= TPopupMenu(ParentMenu).Items.Count - MenuPosition; if MenuPosition<0 then MenuPosition:= TPopupMenu(ParentMenu).Items.Count; TPopupMenu(ParentMenu).Items.Insert(MenuPosition , MenuItem); end else begin MenuPosition:= TMenuItem(ParentMenu).Count - MenuPosition; if MenuPosition<0 then MenuPosition:= TMenuItem(ParentMenu).Count; TMenuItem(ParentMenu).Insert(MenuPosition,MenuItem); end end; end; end;
AddonMenu是一个TStringList的数量,用于存放读取的Ini文件的菜单内容。 Ini内容如下: ;Index=Name,Parent,Caption,Hint,Shortcut,Action,ServiceID,MenuItemIndex counting from the end [Tools_MENU] Tools01=mniTools01,,Tools,PC Tools,,,,2 Tools02=mniTools02,mniTools01,File Handle...,,,,Tools Tools03=mniTools03,mniTools01,-, Tools04=mniTools04,mniTools01,Mail &Handle...,Sent and Receive Mail,,,,Tools Tools05=mniTools05,mniTools02,File &Separate...,File Separate,,1,Tools Tools06=mniTools06,mniTools02,File &Merge...,File Merge,,2,Tools Tools07=mniTools07,mniTools01,Ma&tch Files...,Match File,,4,Tools Tools08=mniTools08,mniTools01,Set &Desktop...,Set Desktop,,5,Tools Tools09=mniTools09,mniTools01,-, Tools10=mniTools10,mniTools01,Computed&Tax...,Computed need to pay tax,,6,Tools Tools11=mniTools11,mniTools01,Remind &Work...,Remind your working,,7,Tools Tools12=mniTools50,Start1,Se&ndMail...,New a mail,,3,Tools Tools14=mniTools13,mniTools04,&Send Mail,Send Mail,,3,Tools Tools15=mniTools14,mniTools04,&Receive Mail,Receive mail,,9,Tools Tools16=mniTools15,mniTools01,&Multiple Chat...,Multiple user chat synchronously,,,Tools Tools17=mniTools16,mniTools15,Chat &Server...,Chat Server,,10,Tools Tools18=mniTools17,mniTools15,Single Chat...,Chat Client,,11,Tools ;Tools19=mniTools18,mniTools15,Chat Clien&t...,Chat Client,,12,Tools
PopupMenu1 := TPopupMenu.Create(Self);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'First Menu';
Item.OnClick := MenuItem1Click;
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Second Menu';
Item.OnClick := MenuItem2Click;
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Third Menu';
Item.OnClick := MenuItem3Click;
PopupMenu1.Items.Add(Item); Item := TMenuItem.Create(PopupMenu1);
Item.Caption := '-';
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Fourth Menu';
Item.OnClick := MenuItem4Click;
PopupMenu1.Items.Add(Item);
其实我们可以使用一种更快的方法达到同样的功能, 但使用很少的代码, 那就是用NewLine和NewItem, 看看下面的例子, 是不是很简单?
PopupMenu1 := TPopupMenu.Create(Self);
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu',0,False,True,MenuItem1Click,0,'MenuItem1'));
Add(NewItem('Second Menu',0,False,True,MenuItem2Click,0,'MenuItem2'));
Add(NewItem('Third Menu',0,False,True,MenuItem3Click,0,'MenuItem3'));
Add(NewLine); // 增加一个分割棒
Add(NewItem('Fourth Menu',0,False,True,MenuItem4Click,0,'MenuItem4'));
Item :TMenuItem;
begin
Item :=TMenuItem.Create(nil);
Item.Caption :='12';
MainMenu1.Items.Add(Item
end;
Item :TMenuItem;
begin
Item :=TMenuItem.Create(nil);
Item.Caption :='12';
MainMenu1.Items.Add(Item);
end;
PopupMenu1 := TPopupMenu.Create(Self);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'First Menu';
Item.OnClick := MenuItem1Click;
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Second Menu';
Item.OnClick := MenuItem2Click;
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Third Menu';
Item.OnClick := MenuItem3Click;
PopupMenu1.Items.Add(Item); Item := TMenuItem.Create(PopupMenu1);
Item.Caption := '-';
PopupMenu1.Items.Add(Item);
Item := TMenuItem.Create(PopupMenu1);
Item.Caption := 'Fourth Menu';
Item.OnClick := MenuItem4Click;
PopupMenu1.Items.Add(Item);
其实我们可以使用一种更快的方法达到同样的功能, 但使用很少的代码, 那就是用NewLine和NewItem, 看看下面的例子, 是不是很简单?
PopupMenu1 := TPopupMenu.Create(Self);
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu',0,False,True,MenuItem1Click,0,'MenuItem1'));
Add(NewItem('Second Menu',0,False,True,MenuItem2Click,0,'MenuItem2'));
Add(NewItem('Third Menu',0,False,True,MenuItem3Click,0,'MenuItem3'));
Add(NewLine); // 增加一个分割棒
Add(NewItem('Fourth Menu',0,False,True,MenuItem4Click,0,'MenuItem4'));
NewItem: TMenuItem;
I : integer;
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := '-';
for I := 0 to Screen.FormCount-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := Screen.Forms[I].Name
var
MenuItem: TMenuItem;
ParentMenu: TComponent;
i, MenuPosition: Integer;
begin
for i := 0 to AddonMenu.Count - 1 do
begin
MenuItem := TMenuItem.Create(Self); {create an item on the fly}
with MenuItem do
begin
{1=Name,Parent,Caption,Hint,Shortcut,AppTag,BPLName,Index}
Name := UserTitle(AddonMenu[i], ',', 1);
Caption := UserTitle(AddonMenu[i], ',', 3);
Hint := UserTitle(AddonMenu[i], ',', 4);
if UserTitle(AddonMenu[i], ',', 5) <> EmptyStr then
Shortcut := TextToShortCut(UserTitle(AddonMenu[i], ',', 5));
Enabled := True;
Visible := True;
Tag := i;
{ if UserTitle(AddonMenu[i], ',', 2)='pmSend' then
OnClick := btnToolBarClick
else }
OnClick := MenuOnClick; {assign OnClick event}
if UserTitle(AddonMenu[i], ',', 2) = EmptyStr then
ParentMenu := nil
else
ParentMenu := Self.FindComponent(UserTitle(AddonMenu[i], ',', 2));
end;
MenuPosition:=StrToIntDef(UserTitle(AddonMenu[i], ',', 8),0);
if ParentMenu = nil then
begin
MenuPosition:= mnuMain.Items.Count - MenuPosition;
if MenuPosition<0 then MenuPosition:= mnuMain.Items.Count;
mnuMain.Items.Insert(MenuPosition , MenuItem);
end
else
begin
if ParentMenu is TMainMenu then
begin
MenuPosition:= TMainMenu(ParentMenu).Items.Count - MenuPosition;
if MenuPosition<0 then MenuPosition:= TMainMenu(ParentMenu).Items.Count;
TMainMenu(ParentMenu).Items.Insert(MenuPosition , MenuItem);
end
else if ParentMenu is TPopupMenu then
begin
MenuPosition:= TPopupMenu(ParentMenu).Items.Count - MenuPosition;
if MenuPosition<0 then MenuPosition:= TPopupMenu(ParentMenu).Items.Count;
TPopupMenu(ParentMenu).Items.Insert(MenuPosition , MenuItem);
end
else
begin
MenuPosition:= TMenuItem(ParentMenu).Count - MenuPosition;
if MenuPosition<0 then MenuPosition:= TMenuItem(ParentMenu).Count;
TMenuItem(ParentMenu).Insert(MenuPosition,MenuItem);
end
end;
end;
end;
AddonMenu是一个TStringList的数量,用于存放读取的Ini文件的菜单内容。
Ini内容如下:
;Index=Name,Parent,Caption,Hint,Shortcut,Action,ServiceID,MenuItemIndex counting from the end
[Tools_MENU]
Tools01=mniTools01,,Tools,PC Tools,,,,2
Tools02=mniTools02,mniTools01,File Handle...,,,,Tools
Tools03=mniTools03,mniTools01,-,
Tools04=mniTools04,mniTools01,Mail &Handle...,Sent and Receive Mail,,,,Tools
Tools05=mniTools05,mniTools02,File &Separate...,File Separate,,1,Tools
Tools06=mniTools06,mniTools02,File &Merge...,File Merge,,2,Tools
Tools07=mniTools07,mniTools01,Ma&tch Files...,Match File,,4,Tools
Tools08=mniTools08,mniTools01,Set &Desktop...,Set Desktop,,5,Tools
Tools09=mniTools09,mniTools01,-,
Tools10=mniTools10,mniTools01,Computed&Tax...,Computed need to pay tax,,6,Tools
Tools11=mniTools11,mniTools01,Remind &Work...,Remind your working,,7,Tools
Tools12=mniTools50,Start1,Se&ndMail...,New a mail,,3,Tools
Tools14=mniTools13,mniTools04,&Send Mail,Send Mail,,3,Tools
Tools15=mniTools14,mniTools04,&Receive Mail,Receive mail,,9,Tools
Tools16=mniTools15,mniTools01,&Multiple Chat...,Multiple user chat synchronously,,,Tools
Tools17=mniTools16,mniTools15,Chat &Server...,Chat Server,,10,Tools
Tools18=mniTools17,mniTools15,Single Chat...,Chat Client,,11,Tools
;Tools19=mniTools18,mniTools15,Chat Clien&t...,Chat Client,,12,Tools