SubMenu ekleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

SubMenu ekleme

Mesaj gönderen dost »

Merhaba,

Kod: Tümünü seç

procedure menu; 
var 
  menu : TMainMenu; 
  Item: TMenuItem; 
begin 
  menu := TMainMenu.Create(Application.MainForm); 

  Item := TMenuItem.Create(menu); 
  Item.Caption := 'menüm --1'; 
  menu.Items.Add(Item); 

  Item := TMenuItem.Create(menu); 
  Item.Caption := 'menüm --2'; 
  menu.Items.Add(Item); 
end; 

RunTime de oluşturulan menuye nasıl runtime de submenu eklerim.

Yardımcı olabilirmisiniz?

Teşekkürler.

*** Kodları [ CODE ] tagı içine alalım. mege
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

nette şöyle bir örnek buldum. text dosyadan menu oluşturuyor. :wink:

Kod: Tümünü seç

     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; 
Kaynak
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

810 tane menü :) biraz abarttım galiba :P bu 9-10 sayısını arttırdıkça durum komikleşiyor. menüler yavaaş yavaaaaaş yükleniyor, sanki animasyonlu menu :mrgreen:

Kod: Tümünü seç

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;
.-.-.-.-.-.-.-. ^_^
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Mesaj gönderen dost »

İlginize teşekkür ederim.
Cevapla