|
Delphi'nin ValueListEditor Kontrolü

Yazar:
Memik YANIK
Kategori:
Delphi
Eklenme Tarihi:
22.06.2007 15:47:43
Formun üzerinde anahtar değer çiftini gösterip kullanıcının seçim yapmasına imkan vermek istiyorsanız ValueListEditor kontrolünü kullanabilirsiniz...
Formun üzerinde anahtar değer çiftini gösterip kullanıcının seçim yapmasına imkan vermek istiyorsanız ValueListEditor kontrolünü kullanabilirsiniz. Hemen açıklama yapmak gerekirse kendiniz anahtar-değer çifti içeren Strings koleksiyonu hazırlayıp içeriğini StringGrid’de veya 2 ListBox’ta listeleyip aynı sonuçları elde edebilirsiniz.
2 sütunlu StringGrid nesnesi görünümündeki bu kontroldeki sütunların başlıklarını değiştirmek istiyorsanız TitleCaptions özelliğinden yararlanmalısınız. Bu kontrolün birçok özelliği StringGrid kontrolü ile aynıdır.
TStrings tipindeki TitleCaptions özelliğe ait düğmeyi tıkladığınızda ekrana String List Editor diyalog kutusunun geleceğini tahmin edebilirsiniz. Başlangıçta ValueListEditor nesnesi Key ve Value başlığına sahip 2 sütuna sahip olduğu için String List Editor diyalog kutusunda 2 seçenek yer almaktadır. Key ve Value adlı bu seçeneklere istediğiniz başlık metnini verebilirsiniz.
TStrings tipindeki TitleCaptions özelliğinin içeriğini kod yazarak değiştirebilirsiniz. ValueListEditor nesnesini yerleştirmiş olduğunuz formun Create yordamını aşağıdaki gibi düzenlemeniz halinde sütun başlıklarını değiştirmiş olursunuz.
procedure TForm1.FormCreate(Sender: TObject); begin ValueListEditor1.TitleCaptions.Insert(0, 'Anahtar'); ValueListEditor1.TitleCaptions.Insert(1, 'Değer'); end;
Bu kodda sütun başlığı olarak kullanılacak elemanları Insert metodu ile Strings tipindeki TitleCaptions koleksiyonuna eklediğim için mevcut elemanlar kayar. Aşağıdaki gibi kod yazıp mevcut elemanları silip eleman ekleme işlemini ondan sonra yapabilirsiniz.
procedure TForm1.FormCreate(Sender: TObject); Var Sayi, i : Integer; begin Sayi := ValueListEditor1.TitleCaptions.Count; For i:= Sayi -1 Downto 0 Do Begin ValueListEditor1.TitleCaptions.Delete(i); End; ValueListEditor1.TitleCaptions.Add('Anahtar'); ValueListEditor1.TitleCaptions.Add( 'Değer'); end;
Şimdi ise TitleCaptions özelliğinin veya koleksiyonun içeriğini farklı bir teknikle değiştireceğim. Bu amaçla önce bir StringList nesnesi hazırlayıp 2 eleman aktardım.
procedure TForm1.FormCreate(Sender: TObject); Var Liste : TStringList; begin Liste := TStringList.Create; Liste.Add('Anahtar'); Liste.Add('Değer'); ValueListEditor1.TitleCaptions := Liste; end;
Value List Editor’de listelenecek seçeneklerini tasarım anında veya kod yazarak belirleyebilirsiniz. Seçenek veya elemanları tasarım anında belirlemek istiyorsanız Strings özelliğinden yararlanmanız gerekir. Object Inspector penceresinde bu özelliği ait düğmeyi tıkladığınızda ekrana aşağıda verilen Value List Editor diyalog kutusu gelir.
Value List Editor diyalog kutusunda istediğiniz sayıda seçeneğin anahtar ve değer bilgilerini girdikten sonra ValueListEditor nesnesinden yararlanabilirsiniz. Çalışma anında ValueListEditor’de listelenen seçeneklerden birisi tıklanıp seçildiğinde SelectCell olayı meydana gelir.
Bu olayı temsil eden yordamın Integer tipindeki Acol ve ARow parametreleri ile çalışma anında üzeri tıklanıp seçilen hücrenin sütun ve satır değeri yordama gönderilmektedir. Seçilen hücrenin veya seçeneğin anahtar-değer bilgilerini elde etmek için forma 2 Edit yerleştirip aşağıda verdiğim kodu yazdım.
procedure TForm1.ValueListEditor1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin Edit1.Text := ValueListEditor1.Keys[Arow]; Edit2.Text := ValueListEditor1.Values[Edit1.Text]; end;
Tahmin edeceğiniz gibi ValueListEditor nesnesinin anahtar bilgileri Keys koleksiyonunda, değer bilgileri ise Values koleksiyonunda saklanmaktadır. Hangi elemanın veya satırın anahtarını elde etmek istiyorsanız o satırın sıra numarasını yukarıda yapıldığı gibi Keys koleksiyonuna parametre olarak vermelisiniz.
ValueListEditor nesnesinin goRowSelect özelliği false olduğu için satır seçme işlemi yapılamaz. Yalnızca değer bilgilerinin saklandığı 2. sütundaki hücreler seçilebilir. Satır seçme işlemine izin vermek istiyorsanız Object Inspector penceresinde Options adı altında gruplanmış seçeneklerden birisi olan goRowSelect özelliğini True yapmalı veya bu özelliği aşağıda yapıldığı gibi kod yazarak ayarlamalısınız.
ValueListEditor1.Options := ValueListEditor1.Options + [goRowSelect];
Yukarıda ValueListEditor’de listelenecek anahtar-değer çiftlerini tasarım anında Object Inspector penceresinden yararlanarak belirledim. Bu seçenekleri kod yazarak çalışma anında belirleyebilir veya mevcut bir dosyanın içeriğini okuyup ValueListEditor nesnesine aktarabilirsiniz. Bu işlemin nasıl yapıldığını anlatmak için Object Inspector penceresinde Strings özelliğine ait düğmeyi tıklayıp Value List Editor diyalog kutusunu ekrana getirip mevcut seçenekleri sildim aşağıda verdiğim kodu yazdım.
procedure TForm1.AktarClick(Sender: TObject); begin ValueListEditor1.Strings.Add('Adana=01'); ValueListEditor1.Strings.Add('Ankara=06'); ValueListEditor1.Strings.Add('Antalya=07'); ValueListEditor1.Strings.Add('İstanbul=34'); ValueListEditor1.Strings.Add('İzmir=35'); end;
Bu kodda anahtar-değer bilgilerini kod yazımı sırasında belirledim. Örnek olması için forma 2 ListBox yerleştirip ilk ListBox’a il adlarını ve 2. ListBox’a ise illerin plakalarını yazıp aşağıda verdiğim kodu yazdım.
procedure TForm1.AktarClick(Sender: TObject); Var Sayi, i : Integer; Eleman :String; begin Sayi := ListBox1.Items.Count; For i:=0 To Sayi-1 Do Begin Eleman := ListBox1.Items[i] + '= ' + ListBox2.Items[i]; ValueListEditor1.Strings.Add(Eleman); End; end;
ValueListEditor nesnesinin Strings özelliği gerçekte TStrings tipinde bir koleksiyon olduğu için kendiniz Strings koleksiyonu hazırlayıp bu özelliğe aktarabilirsiniz. Bu nedenle yukarıda verilen kod aşağıdaki gibi düzenlenebilir.
procedure TForm1.AktarClick(Sender: TObject); Var Sayi, i : Integer; Liste :TStringList; begin Liste := TStringList.Create; Sayi := ListBox1.Items.Count; For i:=0 To Sayi-1 Do Begin Liste.Add(ListBox1.Items[i] + '= ' + ListBox2.Items[i]); ValueListEditor1.Strings := Liste; End; end;
Memik YANIK
Buradaki arkadaşlara göre yaşlı sayılırım; ilk masaüstü bilgisayarım 3000$'a aldığım 386sx-16 işlemciliydi. 1 MB belleği ve 40 MB diski vardı. Sonra 12 Mhz hızında 286 işlemcili Laptop bilgisayar edindim. Ağırlığı 7-8 kilo kadardı. İlk kitabım Clipper 5.2'yi bu bilgisayarda yazdım. Bu kitap 1994 yılında yayınlandı. İlk makelem 1992 yılında Bilgisayar Pazarı dergisinde yayınlandı. Devamında Pc World dergisinde 1 yıl kadar her ay yazılar yazdım. Sizinle asıl paylaşmak istediğim konu şudur: Değişken adı benzerliğinden dolayı, başka bir deyişle kitaplarımda verdiğim kısacak örneklerde sayi, i, j, dosya gibi değişkenlere yer verdiğim için yargılanmaya devam ediyorum.
|