Ç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'.
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));
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;
Kod: Tümünü seç
TButton(ListBox1.Items.Objects[1]).Click;
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;