Mainmenu & Listview hakkinda bir soru

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mainmenu & Listview hakkinda bir soru

Mesaj gönderen Glen »

Selam,

Listview kullaniyorum ve bildigimiz explorer gibi kullanmak istiyorum. Cift tiklanilinca bir icine giricek, bir kere daha cift tiklayinca tekrar icine giricek falan filan.. Ve en son kademeye geldiginde tiklayinca herhangi bir formu acicak..

$u kullanimdan daha basit bir yol varmi:

Kod: Tümünü seç

if cxListview1.ItemFocused.Caption = 'Stok' then
    begin
          cxListview1.Items.Clear;
          cxListview1.Items.Add;
          cxListview1.Items.Item[0].Caption := 'Kartlar';
          cxListview1.Items.Add;
          cxListview1.Items.Item[1].Caption := 'Hareketler';
          cxListview1.Items.Add;
    end else
if cxListview1.itemfocused.caption = 'Kartlar' then
    begin
                  ................
                  ................
    end else
if cxListview1.itemfocused.caption = 'Hareketler' then
    begin
                  ................
                  ................
    end else

Yani bu kadar az olsa tamam heralde bi 50 60 tane böyle menu var ve her birini tek tek yazmak, tamam calisicak ama yani pek akil kâri gozukmuyor sanki daha kolay bir yolu varmi$ gibi geliyor.

Mesela main menu iteminde benim bütün menülerim duruyor oradan otomatik okuyup o menulere gore kendini yaratmasi mümkün mü.. Ve de her tikladiginda bir alt kademeye girmesi.
En son kademeye geldiginde ise istedigi menuye girmesi..
Veya bunun gibi daha kolay bir yerden okutabilecegim bir olay.

Şimdiden teşekkür ederim, Herkese kolay gelsin
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bunu hiyerarşik bir düzende veritabanına kaydedersin (Yani menuyu veritabanında tutarsın) listview'ı doldururken de bulunduğun yere göre (alta girmek istiyorsa bir alt seviyedeki itemleri yükler Listview'e doldurursun. Üste Çıkıyor ise bir üst seviyedeki itemleri yüklersin.

Anlatabildim mi bilmiyorum ama olası veritabanındaki menu tablosu şu şekilde olabilir. (Bu sana fikir versin, aynısı olsun diye değil)

Kod: Tümünü seç

  MENU_ID INT,
  MENU_ADI VARCHAR(20),
  MENU_TIPI INT,
  MENU_ATASI INT
MENU_ID -> Otomatik Artan bir ID
MENU_ADI -> İlgili menu seçeneğinin ekranda görülecek adı
MENU_TIPI -> Bu bir Alt Menu'mudur (SubMenu) yoksa son noktadaki çalıştırılacak program mıdır bunu ayırt edecek bir değer Örneğin 1 Olursa Alt Menu, 2 Olursa Son noktadaki program
MENU_ATASI -> Eğer buraya -1 değeri konursa, en tepedeki menü (Root) gibi, eğer bir alt menü veya herhangi bir son noktadaki program ise, kendisinin bağlı bulunduğu bir üst daldaki Menu Item'ı

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Kuri_YJ yazdı:Selamlar,

Bunu hiyerarşik bir düzende veritabanına kaydedersin (Yani menuyu veritabanında tutarsın) listview'ı doldururken de bulunduğun yere göre (alta girmek istiyorsa bir alt seviyedeki itemleri yükler Listview'e doldurursun. Üste Çıkıyor ise bir üst seviyedeki itemleri yüklersin.

Anlatabildim mi bilmiyorum ama olası veritabanındaki menu tablosu şu şekilde olabilir. (Bu sana fikir versin, aynısı olsun diye değil)

Kod: Tümünü seç

  MENU_ID INT,
  MENU_ADI VARCHAR(20),
  MENU_TIPI INT,
  MENU_ATASI INT
MENU_ID -> Otomatik Artan bir ID
MENU_ADI -> İlgili menu seçeneğinin ekranda görülecek adı
MENU_TIPI -> Bu bir Alt Menu'mudur (SubMenu) yoksa son noktadaki çalıştırılacak program mıdır bunu ayırt edecek bir değer Örneğin 1 Olursa Alt Menu, 2 Olursa Son noktadaki program
MENU_ATASI -> Eğer buraya -1 değeri konursa, en tepedeki menü (Root) gibi, eğer bir alt menü veya herhangi bir son noktadaki program ise, kendisinin bağlı bulunduğu bir üst daldaki Menu Item'ı

Kolay Gelsin
Selam adnan abi ilk oncelikle tesekkür ederim.. Ama sence de programin menülerini veritabaninda tutmak saglikli mi ? yani ben sanki o kismi delphinin icinden halettemem gerektigine inaniyorum.. Yani en kötü ihtimal tek tek yapicam bu olayi ama ne bilyim main menu den filan böyle bi kere de okutan bir olay varmi diye dü$ünmü$üm de galiba yok :)

Tekrardan tesekkürler.. Kolay gelsin
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Glen yazdı: Selam adnan abi ilk oncelikle tesekkür ederim.. Ama sence de programin menülerini veritabaninda tutmak saglikli mi ? yani ben sanki o kismi delphinin icinden halettemem gerektigine inaniyorum.. Yani en kötü ihtimal tek tek yapicam bu olayi ama ne bilyim main menu den filan böyle bi kere de okutan bir olay varmi diye dü$ünmü$üm de galiba yok :)
Tekrardan tesekkürler.. Kolay gelsin
anladıgım kadarıyla yardımcı olmaya calısayım :lol:

MainMenu1 deki icerigi ListView1 e göndermek

Kod: Tümünü seç

  private
    { Private declarations }
    procedure Menu_To_List;
    procedure Menu_To_Tree;

Kod: Tümünü seç

 procedure TForm1.Menu_To_List;
{-Local-procedure-}
  procedure AddList(STR:string; Index: Integer);
  begin
    with ListView1.Items.Add do
      begin
        Caption := STR;
        ImageIndex := Index;
        OnClick:= MENU_Click;
        tag:=Index;
      end;
  end;
  {-Local-procedure-End-}
var
  I,J: Integer;
begin
  ListView1.Items.Clear;
  for I := 0 to Pred(MainMenu1.Items.Count) do
   for j := 0 to MainMenu1.Items[i].Count -1 do
   Addlist(MainMenu1.Items[i].Items[j].Caption, J);
end;
MainMenu1 deki icerigi TreeView1 e göndermek

Kod: Tümünü seç

procedure TForm1.Menu_To_Tree;
  var
 Alt_Sub_item,Ust_Item,Node: TTreeNode;
{-Local-procedure-1}
  procedure Ekle_tree_baslik(STR:string; Index: Integer);
  begin
    with TreeView1 do
      Ust_Item :=Items.Add(nil,STR);
  end;
   {-Local-procedure-1-End-}
    {-Local-procedure-2}
   procedure Ekle_tree(STR:string; I: Integer);
   begin
    with TreeView1 do
     Alt_Sub_item := TreeView1.Items.AddChild(Ust_Item,STR);
  end;
  {-Local-procedure-2-End-}
var
  I,J: Integer;
begin
  TreeView1.Items.Clear;
  for I := 0 to Pred(MainMenu1.Items.Count) do  begin
    Ekle_tree_baslik(MainMenu1.Items[i].Caption,i);
   for j := 0 to MainMenu1.Items[i].Count -1 do begin
   Ekle_tree(MainMenu1.Items[i].Items[j].Caption, J);
   end;
  end;
end;
ve

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
Menu_To_List;
Menu_To_Tree;
end;
meraktan oturup yazdım umarım işine yarar
sevgiler.. :idea:
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla