Şimdiye kadar yazdığım Delphi konulu kitaplarda ValueListEditor’den hiç söz etmemiştim. Şu aralar yazımını sürdürdüğüm Turbo Delphi kitabımda ValueListEditor hakkında yüzeysel bile olsa söz etmeye karar verdim.
Bu kararı verdikten sonra ilk olarak delphiturkiye.com’un offline sürümüne baktım: Hiç bilgi yoktu. Ardından sayıları hiç te az olmayan bendeki Delphi konulu kitapları karıştırdım. Yalnızca 2 Türkçe telif kitapta (aslında bir) birer sayfalık açıklama vardı. Üstelik bu açıklamalar ValueListEditor nesnesinin bazı görsel özelliklerinin Object Inspector penceresinde ayarlanması ile ilgiliydi. Marco Cantu’nun Delphi 3 ve Delphi 5 kitaplarının Türkçe edisyonlarında ValueListEditor’den hiç söz edilmezken 7. versiyonunu anlatan kitapta kısa da olsa bilgi bulunuyordu.
Kitabım için kaleme aldığım metnin bir kısmını delphitürkiye.com üyeleri paylaşmak üzere buraya “Copy-Paste” aktardım. Burada ekran görüntülerine yer veremediğim için anlatımda yer yer atlamalar oldu. Yaklaşık 2 yıl önce C# konulu bir siteye Metot ve Fonksiyon Hazırlamak adında bir makele vermiştim. Makale sistede yayınladıktan sonra bir üniversitemizin muhterem öğretim görevlisi şöyle bir tepkide bulunmuştu: “Okuyucuya teknoloji lazım. Algoritma değil. Standart Memik Yanık yazısı. Bıkmadınız mı daha ?” Umarım delphiturkiye.com üyelerinin hepsinin memik yanık tarafından kaleme alınmış metinlere aradan 40 yıl geçse bile dönüp bakmama yemini yoktur.
ValueListEditor Kontrolü
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.
Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
begin
ValueListEditor1.TitleCaptions.Insert(0, 'Anahtar');
ValueListEditor1.TitleCaptions.Insert(1, 'Değer');
end;
Kod: Tümünü seç
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;
Kod: Tümünü seç
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 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.
Kod: Tümünü seç
procedure TForm1.ValueListEditor1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
Edit1.Text := ValueListEditor1.Keys[Arow];
Edit2.Text := ValueListEditor1.Values[Edit1.Text];
end;
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.
Kod: Tümünü seç
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.
Kod: Tümünü seç
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;
Kod: Tümünü seç
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;
Kod: Tümünü seç
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;