TObjectList, TListItems Sorunsalı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mceL
Üye
Mesajlar: 56
Kayıt: 28 Eyl 2003 01:19
Konum: Bursa
İletişim:

TObjectList, TListItems Sorunsalı

Mesaj gönderen mceL »

Merhabalar,
Bir adet TObjectList'im var. Adı: ListeListe. Form oluşturulduğu zaman kendisinide oluşturuyorum.

Kod: Tümünü seç

ListeListe := TObjectList.Create(True);
ListeListe'de TListItems sınıfındaki verileri tutacağım.
Kayıt varken ekleme yapıyorum;

Kod: Tümünü seç

ListeListe.Add(listeEmlaklar.Items);
// listeEmlaklar ListView Biçiminde (Gösterimi: vsReport)
Örneğin ListeListe'deki ilk sıradaki ListItems'ları ListView.Items yapmak için

Kod: Tümünü seç

listeEmlaklar.Items.Assign(TListItems(ListeListe[0]));
kullanıyorum. Her seferinde boş döndürüyor kayıtları.
Kaçırdığım bir nokta mı var?
( Assign yerine Items := TListItems(ListeListe[0]) biçiminde de denedim. Hep boş döndürüyor.)

{ Delphi7 kullanıyorum. Contnrs.pas'ı dahil ediyorum. }

Hepimize kolay gelsin.
Saygılar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

TObjectList sınıfların adreslerini saklar sadece. yani siz bir nesneyi buraya eklemis olabililirsiniz ama ardindan bu nesneyi baska bir yerde yok ederseniz TObjectList teki nesnede dogal olarak yok olacaktir.

boyle bir yanlis algilamaya dustugunuz gibi bir his var icimde.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Ben de şunu hatırlatayım, OnCreate'de oluşturduğunuz şeyi daha sonra kullanabilmeniz için, o değişkenin global tanımlanması lazım. Yani prosedür içinde var'dan sonra değil, Form1:TForm1 yazan yerde tanımlamalısınız.
mceL
Üye
Mesajlar: 56
Kayıt: 28 Eyl 2003 01:19
Konum: Bursa
İletişim:

Mesaj gönderen mceL »

sadettinpolat yazdı: bu nesneyi baska bir yerde yok ederseniz TObjectList teki nesnede dogal olarak yok olacaktir.
Öncelikle çok teşekkür ederim. Adres saklama işinizi gözden kaçırmışım, haklısınız. Fakat ilginçlik asıl şurada; şimdi ben TObjectList'de ListView'in o anki .Items'larını saklıyorum.
Anlamadığım, ListView.Items := ListeListe[0] as TListItems yaptığında niçin boş döndürüyor. ListView.Items dolu, adres ona gidiyor. Yapması gereken olduğu gibi kalmak değil mi? Sonuçta ben ona b = a iken a = b diyorum.

Şimdi Memo üzerinde denedim, ObjectList vs.. kullanmadan,
Memo1.Lines := Memo1.Lines , Memo1.Lines üzerinde yazı bırakmadı.

Benim anlamadığım bir nokta mı var burada?
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

mceL yazdı: Şimdi Memo üzerinde denedim, ObjectList vs.. kullanmadan,
Memo1.Lines := Memo1.Lines , Memo1.Lines üzerinde yazı bırakmadı.

Benim anlamadığım bir nokta mı var burada?
bunun neden boyle oldugunu anlamak icin biraz vcl in derinliklerine inip delphinin buralarda neler karistirdigina bakmak lazim.

projenin search pathine vcl dizinini eklerseniz ve Memo1.Lines := Memo1.Lines satirina bir break point koyup ardindan olaylari f7 ile trace ederseniz komutun soyle bir yere dallandigini gorebilirsiniz.

Kod: Tümünü seç

procedure TMemoStrings.Clear;
begin
  Memo.Clear;
end;
yani memo1 dekileri yine memo1 e kopyalamadan once ilk once memo1 deki yazilar siliniyor. ardindan memo1 deki yazilar memo1 e kopyalaniyor. memo1 de dogal olarak hicbirsey olmadigindan sonuc olarak memo1 deki yazilar kayboluyor.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
mceL
Üye
Mesajlar: 56
Kayıt: 28 Eyl 2003 01:19
Konum: Bursa
İletişim:

Mesaj gönderen mceL »

bunun neden boyle oldugunu anlamak icin biraz vcl in derinliklerine inip delphinin buralarda neler karistirdigina bakmak lazim.
Soruyu sorduktan sonra biraz inceleme yaptım Delphi komutlarında. Dediğiniz gibi öncelikle siliyor.

Teşekkürler tüm ilgileriniz için.

Hepimize kolay gelsin.
Hayırlı günler.
Cevapla