Dinamik menu olusturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Dinamik menu olusturma

Mesaj gönderen Burhan_ast »

Merhaba arkadaslar

Kod: Tümünü seç

procedure TForm1.MenuClick(Sender: TObject);
begin
if Sender is TMenuItem then
 Showmessage(inttostr(TMenuItem(Sender).Tag));
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  menu : TMainMenu;
  Itemmenu,
     ItemSubmenu,
       ItemSubSubmenu : TMenuItem;

  dongumenu,
  dongualtmenu,
  dongualtaltmenu :integer;
begin
  Menu := TMainMenu.Create(Application.MainForm);
  for dongumenu:= 1 to 10 do
  begin
     Itemmenu := TMenuItem.Create(menu);
     Itemmenu.Caption := 'Menum '+inttostr(dongumenu);
     menu.Items.Add(Itemmenu);
       for dongualtmenu:= 1 to 9 do
       begin
           ItemSubmenu := TMenuItem.Create(menu);
           ItemSubmenu.Caption := 'Menum '+inttostr(dongumenu)+ '_'+inttostr(dongualtmenu);
           ItemSubmenu.Name := 'Menum_'+inttostr(dongumenu)+ '_'+inttostr(dongualtmenu);
           Itemmenu.Add(ItemSubmenu);
           InsertComponent(ItemSubMenu); // Bu satiri eklemeyince findComponent calismiyor
                                         // ama bu satiri ekleyince formu kapatmak istedigimde hata aliyorum...
           for dongualtaltmenu:= 1 to 9 do
           begin
               ItemSubSubmenu := TMenuItem.Create(menu);
               ItemSubSubmenu.Tag := (dongumenu*100)+(dongualtmenu*10)+dongualtaltmenu;
               ItemSubSubmenu.Caption := 'Menum '+inttostr(ItemSubSubmenu.Tag);
               ItemSubSubmenu.OnClick :=  MenuClick;
               TMenuItem(FindComponent(ItemSubmenu.name)).Add(ItemSubSubmenu);
               //ItemSubmenu.Add(ItemSubSubmenu); orjinali bu satirin yerine ustteki satiri ekledim...
           end;
       end;
  end;
end;


Seklinde daha once forumda olan bir kod buldum, bu kod uzerinde biraz degisiklik yapmam lazim soyleki

Kod: Tümünü seç


TMenuItem(FindComponent(ItemSubmenu.name)).Add(ItemSubSubmenu);
               //ItemSubmenu.Add(ItemSubSubmenu); orjinali bu satirin yerine ustteki satiri ekledim...

Seklinde orjinal satiri // yapip yerine bir ustundeki satiri ekledim,

Ayrica

Kod: Tümünü seç


           InsertComponent(ItemSubMenu); // Bu satiri eklemeyince findComponent calismiyor
                                         // ama bu satiri ekleyince formu kapatmak istedigimde hata aliyorum...

Seklinde birde insertComponent satiri ekledim, her guzel bu degisiklikler ile kod calisir hale geldi, fakat formu kapatmak isteyince hata aliyorum, insertcomponent satirindan kaynaklaniyor fakat insertcomponent satirini kaldirincada bu seferde findcomponent calismiyor,

Bunu bu sekilde calistirmak istememin sebebi programdaki menu bir data tablosunda tutuluyor ve tablodaki degerler ile hangi menu hangisinin altinda v.s. gibi bilgiler tutuluyor,

Saygilar


Burhan Cakmak
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

ItemSubmenu nesnesini çnce olsturmussunuz fakat işiniz bittignde FREE ediyormusunuz.
Bir de aldıgınız hata mesajı nedir tam olarak yazarmısınız!
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.
FindComponent, ComponentCount gibi komutlar ilgili owner üzerinde işlem yaparlar.Siz menu yü owner vererek create ediyorsunuz ve FindComponent'i direkt kullanıyorsunuz, haliyle form üzerinde arama yapacak ve bulamayacaktır.Dolayısıyla da hata döndürecektir..

Kod: Tümünü seç

  TMenuItem(menu.FindComponent(...
şeklinde deneyebilirsiniz..

Kolay gele.
Cevapla