treeview içini doldurma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

treeview içini doldurma

Mesaj gönderen delphist »

Arkadaşlar Merhaba...Hiyerarşik yapıda treeview içini doldurmam lazım.

Seviye ile ilgili bir olay..................................

Ben şöyle bir mantık kurmaya çalıştım...Bu konuda yardımcı olursanız sevinirim....Table da 0 dan başlamak üzere numaralar var bunlar seviye örneğin 0 ise Nil ile zaten başa yazılıyor. Bir ise örneğin sıra ile 0,1,2,1,2,3,4,2,3,2,2,1 gibi sıra ile seviye gelebiliyor Tabi burda döngü kendi arasında bunları seviyesine göre yazması lazım child vs. ama tabi bir önceki gelen verinin seviyesini bilmeli ki bir sonrakini ona göre yazsın ama ben bunu beceremedim. Belki kolay bir şey ama ben yapamadım :oops:

for i:= query1.recordcount -1 do
begin
x:=query1seviye.asinteger;

case x of
begin
0:
begin
end;
1:
begin
end;
2:
begin
end;
3:
begin
end;
4:
begin
end;
5:
begin
end;


end;


query1.next;
end;
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

if leri kullan karşılaştırmaları yap bir önceki sayı ile üstünde bulunduğun sayıya bak şartlara göre TreeView e atama yap.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Doğrusun Husonet if kullanıyım da Sabahtan beri if kullanmaktan ziyan oldum :cry: ...sorry...Ama Durum şöyle yardımcı olursanız çok memnun olucağım...Böyle bir seviye durumu var ama bunun bin farklı durumu var yani...Her şekilde gelebiliyor...Benim bunu hiyerarşik yerleştirmem lazım...Kafam karıştı...Dinamik bir şekilde nasıl yapılabilir...Gerçekten kusura bakmayın...Şimdiden Teşekkürler

0
1
2
2
2
2
2
2
3
2
1
2
3
3
3
3
3
3
3
3
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

tabi bir önceki gelen verinin seviyesini bilmeli ki bir sonrakini ona göre yazsın ama ben bunu beceremedim.
Bunun için Temp değişken yaparsın ve döngü bir artmadan önceki halini temp değişkene atarsın ve döngü arttığı zaman şart ı Temp değişken ile karşılaştırırsın.

Mantık şu şekilde olmalı :idea:

Kod: Tümünü seç

temp := 0;
while i < 10 do
begin
     if şart = temp then
        //.............
     temp := şart;
     i := i +1; 
.............................
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Hüseyin Bey, Dediğiniz gibi yapmaya çalışıyorum ama beceremedim. Şöyle söyleyim...Yani şimdi bir de şöyle bir durum var...Durum 0 iken Nil olarak açtığımız kaydın altında 1 varsa bunu child olarak Node ekliyoruz onun bir altına geçiyoruz fakat şöyle bir durum var tabi arkasından gelen iki varsa bunu da node:= demeden addchild olarak (Node, query1vesaire.asstring) şeklinde eklediğimizdede doğru olarak ekliyor fakat bu node altına eklersen bunun arkasından bu ikinin altında olan bir 3 ekleyeceğimiz zaman 2 nin altına ekleyemiyorum. Yani bunu nasıl yapacağım...Umarım derdimi anlatabilmişimdir.

Teşekkürler
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

devexpressin dbtree diye bi component paketi var onada baktım...Ama Ata oğul ilişkisi kuruyor vs. diyor...ama nafile..olmuyor.... :(
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

@husonet bahsettiğin şeyi ben anlamadım... Çok üstü kapalı anlatmışsın bu konuda dostça eleştirimi kabul et... :)

- Soruya geleyim....

- Node hiyerarşisinin nasıl çalıştığını kavrarsanız hiç sorun yaşamazsınız...

- Önerim öncelikle 0km bir TreeView'e, bilgisayar değil de kendiniz olsanız verileri nasıl doldururdunuzu bir kağıda adım adım yazın... Gözünüzle yaptığınız arama işlemlerini de yazın. Mesela ilk Child hangisi diye aradıklarınız olacak. :idea:

- Başka bir yönden dolu bir TreeView'i SaveToFile ile TXT dosyası olarak kaydedip inceleyin. Göreceksiniz ki her seviye TAB karakteri ile ileri atlanmış olarak kaydedilmiş. Bir fonksiyon ile bu text dosyasını nasıl hazırlayabilirinizi araştırırsanız, ürün TXT dosyasını direkt hazır halde LoadFromFile ile TreeView içine alabilirsiniz. :idea:

- Etüdünüzden sonra kendi adıma bir sonraki mesajımda Node Hiyerarşisi ile ilgili bir kaç şey yazarım...
En son mrmarman tarafından 17 Oca 2005 11:52 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Tekrar merhaba...

- Vakit bulamayabilirim diye bahsettiğim kavram hakkındaki etüd çalışmanız için bir örnek hazırladım. :wink:

:wink: - Başlığı açtığınız ilk sıralama ile ilgili Node oluşturmayı sizin için adım adım hazırladım... Buradaki uygulamayı IF kurgusuna dönüştürünüz... Emin olun veritabanı aktarımınız tereyağından kıl çeker gibi hallolacaktır. Hatta dinamik bir fonksiyon bile hazırlama şansınız var... :idea:

Kod: Tümünü seç

  // 0 Root Node oluşturuyoruz...
  TreeView1.Items.AddFirst(Nil, '0');
  // Bunu ilk Node'u seçiyoruz..
  TreeView1.Selected := TreeView1.Items.GetFirstNode;
  // 1 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '1');
  // Bunu ilk ChildNode'u seçiyoruz..
  TreeView1.Selected := TreeView1.Selected.getFirstChild;
  // 2 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '2');
  // 1. Seviyeye geri Level adım atıyoruz...
  TreeView1.Selected := TreeView1.Selected.Parent;
  // 1 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '1');
  // Son ChildNode'u seçiyoruz..
  TreeView1.Selected := TreeView1.Selected.getLastChild;
  // 2 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '2');
  // ilk ChildNode'u seçiyoruz..
  TreeView1.Selected := TreeView1.Selected.getFirstChild;
  // 3 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '3');
  // ilk ChildNode'u seçiyoruz..
  TreeView1.Selected := TreeView1.Selected.getFirstChild;
  // 4 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '4');
  // 2.Seviyeye geri Level adım atıyoruz...
  TreeView1.Selected := TreeView1.Selected.Parent;
  TreeView1.Selected := TreeView1.Selected.Parent;
  // 2 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '2');
  // Son ChildNode'u seçiyoruz..
  TreeView1.Selected := TreeView1.Selected.getLastChild;
  // 2 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '3');
  // 2.Seviyeye geri Level adım atıyoruz...
  TreeView1.Selected := TreeView1.Selected.Parent;
  // 2 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '2');
  // 1.Seviyeye geri Level adım atıyoruz...
  TreeView1.Selected := TreeView1.Selected.Parent;
  TreeView1.Selected := TreeView1.Selected.Parent;
  // 1 Bir Child Ekliyoruz...
  TreeView1.Items.AddChild(TreeView1.Selected, '1');
  TreeView1.FullExpand;
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

:lol: Dayanamadım, yukardaki işlemi döngüye nasıl dönüştüreceğini de gösterip seni çalışmanla başbaşa bırakayım dedim.... :wink:

- Yukarda saydığım adımları bilgisayara öğrettik... Nasıl mı aşağıdaki gibi... :wink:

Not : verdiğini sıralamayı ListBox1 isminde bir TListBox'a doldurdum... Veriler oradan çekiliyor. Sende veritabanından gelecek...

Kod: Tümünü seç

Var
  Sayac : Integer;
  s1,                 // Veritabanındaki yeni seviye
  s2    :Integer;     // Gelinen son seviye...
begin
  TreeView1.Items.AddFirst(Nil, '0');
  TreeView1.Selected := TreeView1.Items.GetFirstNode;
  s2 := 0;
  For Sayac := 1 to ListBox1.Items.Count-1 do
  begin
    s1 := StrToInt(ListBox1.Items[Sayac]); // oluşacak sıradaki seviye
    While s1 > s2 do
    begin
      If TreeView1.Selected.HasChildren then TreeView1.Selected := TreeView1.Selected.GetLastChild;
      Inc(s2);
    end;
    While s1 < s2 do
    begin
      TreeView1.Selected := TreeView1.Selected.Parent;
      Dec(s2);
    end;
    TreeView1.Items.AddChild(TreeView1.Selected, IntToStr(s2));
  end;
  TreeView1.FullExpand;
end;
- Kolay gelsin...
Resim
Resim ....Resim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

@MrmCop balığı niye verdiniz kötülük ettiniz arkadaşa. Dostça eleştirimi kabul ediniz lütfen.;)


Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

@Mrmcop @husonet mrmcop balık vermemiş ki balina vermiş :) ....Ellerine kollarına ayaklarına sağlık....hocam....Teşekkür ederim...İnanın çalıştım yapmaya denemediğim yol kalmamıştı...Denemesem çalışmasam dediğin doğru ki kesinlikle balık vermemek lazım ama...Ben sonuna kadar yapmaya çalıştım bir şekilde birine oluyor öbürüne oluyor bir diğerine olmuyordu...

Çok Teşekkür ediyorum...Allah razı olsun....
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Kolay Gelsin Listbox ile test ettim mükemmel çalışıyor @mrmcop fakat query1 değiştirmek isteğimde array type required hatası alıyorum...

Kod: Tümünü seç

Var 
  Sayac : Integer; 
  s1,                 // Veritabanındaki yeni seviye 
  s2    :Integer;     // Gelinen son seviye... 
begin 
  TreeView1.Items.AddFirst(Nil, '0'); 
  TreeView1.Selected := TreeView1.Items.GetFirstNode;
  s2 := 0; 
  For Sayac := 1 to adoquery1.RecordCount -1 do
  begin
    s1 := (ADOQuery1seviye.Asinteger[Sayac]); // oluşacak sıradaki seviye
    While s1 > s2 do 
    begin 
      If TreeView1.Selected.HasChildren then TreeView1.Selected := TreeView1.Selected.GetLastChild; 
      Inc(s2); 
    end; 
    While s1 < s2 do 
    begin 
      TreeView1.Selected := TreeView1.Selected.Parent; 
      Dec(s2); 
    end; 
    TreeView1.Items.AddChild(TreeView1.Selected, IntToStr(s2)); 
  end; 
  TreeView1.FullExpand; 
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@husonet ben kabul ettim. Resim
@delphist yazdı: s1 := (ADOQuery1seviye.Asinteger[Sayac]); // oluşacak
@delphist Sen de denizden çıkan balığı görünce pişirmeden yemek istemişsin... Yukardaki senin satırın. AdoQuery'den veri okurken bu tip bir kullanımı nerde gördün :?: Resim

- Şimdi tekrar düşün ve kavram içine oturtarak uygula... Kural hatası yapıyorsun... Resim
Resim
Resim ....Resim
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Teşekkürler @mrmcop..... :) Bilmemek ayıp değil öğrenmemek ayıp demişler......Allah razı olsun....Ellerine sağlık....Ne desem boş valla...Bu kadar yazdın uğraştın benim için...Allah da sana yardım etsin....

Kod: Tümünü seç

Var
 sayac: integer;
  s1,                 // Veritabanındaki yeni seviye 
  s2    :Integer;     // Gelinen son seviye...
  s3: string;
begin 
  TreeView1.Items.AddFirst(Nil, '0');
  TreeView1.Selected := TreeView1.Items.GetFirstNode;
  s2 := 0;
  For Sayac := 1 to ADOQuery1.RecordCount -1 do
  begin
    ADOQuery1.RecNo:=sayac;
    s1 := adoquery1.fieldbyname('seviye').AsInteger;
      While s1 > s2 do
    begin 
      If TreeView1.Selected.HasChildren then TreeView1.Selected := TreeView1.Selected.GetLastChild; 
      Inc(s2);
      
      
    end; 
    While s1 < s2 do
    begin
      TreeView1.Selected := TreeView1.Selected.Parent;
      Dec(s2); 
    end; 
    TreeView1.Items.AddChild(TreeView1.Selected, IntToStr(s2));
        
  end; 
  TreeView1.FullExpand;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Tebrikler... Resim

Memnun oldum, çalışmalarında başarılar... :wink:
Resim
Resim ....Resim
Cevapla