TStrings.AddObject Metodunu Anlamak

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

TStrings.AddObject Metodunu Anlamak

Mesaj gönderen RamazanG »

Makale: Zarko Gajic.
Çeviri: Ramazan Gülbahar.

TStrings.AddObject Metodunu Anlamak


Delphide TListBox ve TComboBox listelenmiş nesneleri “seçilebilen” gösterebilir. TListBox kaydırma çubuğu ile nesneler arasında dolaşılabilir, TComboBox ise aşşağı açılabilen liste gösterebilir.

Genel özellikleri Items içindedir. Items kullanıcının kullanabileceği bir metin listesi tanımlar. Dizayn zamanında Items özelliğine çift tıklarsan, "String List Editorü" özel items nesnelerini girmemize imkan verir. Aslında Items bir TStrings type nesnesinde tanımlanmıştır.

ListBoxın Her Nesnesine İki Metin Eklemek
Kullanıcı bir liste metni göstermek istediği zaman bu da bir seçenektir, örnek olarak bir list box control, Daha fazlasıda var; metin içine başka bir metin ekliyebilirsin(”plain” kullanarak).

ListBox.Items - TStrings "knows" Objesi!
Tstrings için Help sistemini bir fazla kez inceleyelim. Tstring içindeki Objelerin özellikleri; her metin içinde aslında bir metin listesi bulunmasıdır.
Eğer list box içinde ikinci bir metin oluşturmak istersen (ya da obje) items özelliğini kullanmalısın.
“ ListBox.Items.Add” metodunu kullanırken aslında bir liste içine metin eklemiş oluruz, her bir metne başka bir metin eklerken değişik yöntemleride kullanmaya ihtiyacımız olur.
“ ListBox.Items.AddObject” metodu iki değişken kabul eder. İlk değişken, "Item" nesnenin metni. İkinci Değişken, "AObject" nesneyle beraber oluşturulan obje.
Not: “AddItem” metodu “Items.AddObject” metodu ile aynı özellikleri gösterir.

Bir Metin İçinde İki ayrı Metin...
Her iki değişken “Items.AddObject” ve “AddItem” TObject türünden iki değişken kabul eder, aşşağıdakine benzer bir satır olur:

Kod: Tümünü seç

{Derleme hatası!}
 ListBox1.Items.AddObject('zarko', 'gajic');
 
Derleme hatası alınır: E2010 Incompatible types: 'TObject' and 'string'. 
Derleme hatası verir: E2010 Incompatible types: 'TObject' and 'string'.

Bir Obje için metni kolayca sağlayamazsın, Delphi for Win32 string değerleri bir obje değildir.
List box nesnesinde bir metin oluşturalım, Bir Custom Tstring objesine ihtiyacımız olacak ve String değişkenini objeye "transform" edeceğiz.

String İçin Integer...
İkinci nesnede bir tamsayı belirtmek istersen ikinci değişkeni yanlız başına belirtmelisin, aslında bir Tınteger sınıfına ihtiyacımız yoktur.

ListBox1.AddItem('Zarko Gajic', TObject(1973)) ;

Yukarıdaki satırda bir tamsayı "1973" ve yanlız başına belirtilmiş bir metin “Zarko Gajic" vardır. ListBox içinde “Zarko Gajic” metni görünür.

Şimdi ufak bir hile yapalım :)
Yukarıdaki tam sayı objesinden “ type cast” yapalım. "AObject" değişkeni aslında yer gösteren 4 byte lıkbir işaretçidir.
Metnin arkasında oluşturulan bir tamsayıyı alacağız.

Kod: Tümünü seç

 {year: Integer; 1973 değerini verir} 
 year := Integer(ListBox1.Items.Objects[ListBox1.Items.IndexOf('Zarko Gajic')]) ;
ShowMessage(IntToStr(year));
 
Bir Metin İçin Delphi Kontrolü...

Delphi kontrolü aslında bir obje dir, kontrolü her metne ekleyebilir ve list box içinde göstrebilirsin.
Aşşağıdaki kodu formun OnCreate olayına ekleyin, bütün Tbutton kontrollerinin başlıklarını listbox a ekler.

Kod: Tümünü seç

 var
   idx : integer;
 begin
   for idx := 0 to -1 + ComponentCount do
   begin
     if Components[idx] is TButton then     if Components[idx] is TButton then ListBox1.items.AddObject(TButton(Components[idx]).Caption, Components[idx]) ;   end;
 end;
İkinci koda tıklamak için aşşağıdaki kodu kullan:

Kod: Tümünü seç

 TButton(ListBox1.Items.Objects[1]).Click;
String Nesneleri İçin Custom Objects Oluşturmak

Daha fazla seçenek kullanmak için kendi sınıfımızı oluşturalım:

Kod: Tümünü seç

type
   TStudent = class
   private
     fName: string;
     fYear: integer;
   public
     property Name : string read fName;
     property Year : integer read fYear;
     constructor Create(const name : string; const year : integer) ;
   end;
 
 
 constructor TStudent.Create(const name : string; const year : integer) ;
 begin
   fName := name;
   fYear := year;
 end;
 
 
 begin
   //add two string/objects -> students to the list
   ListBox1.AddItem('John', TStudent.Create('John', 1970)) ;
   ListBox1.AddItem('Jack', TStudent.Create('Jack', 1982)) ;

   {İlk olanı algılar student – John}
   student := ListBox1.Items.Objects[0] as TStudent;
 
   {John'un yaşını gösterir}
   ShowMessage(IntToStr(student.Year)) ;
 end;
 

Cevapla