Forum.St| Enteresen Bir Forum Sitesi

Lütfen Sitemize Üye Olunuz Üyeliğiniz Varsa Lütfen Giriş Yapın...

Bağlı değilsiniz. Bağlanın ya da kayıt olun

TListView bileşeni ve Pratik Kullanımı

Aşağa gitmek  Mesaj [1 sayfadaki 1 sayfası]

1 TListView bileşeni ve Pratik Kullanımı Bir Paz Kas. 01, 2009 5:07 pm

CyberDuck

avatar
Varlığımızı Bilmeyenlere Yokluğumuz Kapak Olsun..!
Varlığımızı Bilmeyenlere Yokluğumuz Kapak Olsun..!
TListView



Öncelikle TListView bileşenin ne olduğunu iyice açıklayalım.
Bu bileşen Explorer penceresinde gördüğünüz, dosyaların, klasörlerin
gösterildiği yerle aynı özelliklere sahip olan bir bileşen. Yani bu
bileşenin içinde çeşitli alt birimler oluşturup bunlara bir simge ve
başka alt bilgiler ekleyip, şık bir şekilde ekrana
yansıtabiliriyorsunuz. Bu bileşen "Win32" kategorisi altında bulunuyor.

Hemen söyleyelim öğelerin yönetimi oldukça kolay. TStringList'ten
bildiğimiz Add, Delete gibi metodların biraz değiştirilmiş hallerini
burada da kullanabiliyoruz. Bir farkla, burada ekleme fonksiyonu
parametre almıyor ve dönüş değeri olarak da eklenen öğeye ait bir adres
ya da daha anlaşılır bir şekilde TListItem tipinde bir değişken
döndürüyor. Bu değişken sayesinde yeni eklenen öğeyi rahatça
düzenleyebiliyoruz. Bu bileşeni simgelerle birlikte kullanmak
isterseniz(ki başka türlü çok da güzel görünmüyor zaten [Resimleri görebilmek için üye olun veya giriş yapın.]) formunuza bir "TImageList"
bileşeni eklemeniz gerekiyor. Hatta iki tane eklemelisiniz. Bunlardan
biri 32x32'lik büyük simgeleri taşırken diğeri de 16x16'lık küçük
simgeleri taşıyacak. TListView bileşeninin "LargeImages" ve
"SmallImages" özelliklerini ilgili ImageList'lerle ilişkilendirmeyi
unutmayın.(Özellikler bölümünden ilgili ImageList'i seçin.)

Gelelim TListItem'ın nasıl birşey olduğuna. Bunu iyi bilmelisiniz çünkü TListView bileşeninin tüm öğeleri bu tipte. Hemen özelliklerini tek tek inceleyelim:

Caption(string): Bu özellik adından da anlaşılacağı üzere
öğenin başlık bilgisini, yani ekranda görüntülenecek olan metni
tutuyor.(yenioge.Caption:='Adı'[Resimleri görebilmek için üye olun veya giriş yapın.]

Checked(Boolean): Bu özellik -eğer TListView'un "checkboxes" özelliği true ise- öğenin tikli olup olmadığını belirtiyor.

Cut(Boolean): Bu özellik simgenin kesme işlemi yapıldığı sıradaki gibi yarı saydam görüntülenip görüntülenmeyeceğini belirtiyor.

DropTarget(Boolean): Bu özellik true yapıldığında, öğe
bırakma-bölgesi olarak gösterilir ve ListView içindeki diğer tüm
öğelerin bu özelliği false yapılır.

ImageIndex(Integer): Bu özellik öğenin ilişkilendirilmiş
ImageList içindeki kaç numaralı resmi simge olarak kullanacağını
belirtir. Değeri -1 olduğunda bir simge gösterilmez.

Index(Integer): Bu özellik öğenin ListView içindeki yerini belirtir. İlk öğenin Index'i 0'dır.

OverlayIndex(Integer): Bu özellik kulanılacak üst katman resminin(overlay image) ImageList içindeki yerini belirtir.

Selected(Boolean): Bu özellik öğenin seçili olup
olmadığını belirtir. ListView içinde birden fazla öğe seçildiğinde
öğenin seçili olup olmadığını bu özelliğine bakarak anlayabiliriz.

SubItemImages(Array of Integer): Bu özellik öğenin alt
öğelerinin resim numaralarını tutar. Eğer alt öğelerin yanında resim
görüntülemek istiyorsanız "SubItemImages[1]:=5" gibi bir ifadeyle bunu
yapabilirsiniz. Burada köşeli ayraçlar arasındaki "1" alt öğenin
indexini ve "5" de resim indexini belirtiyor.

SubItems(TStrings): Bu özellik alt öğeleri tutar. Alt öğe
eklemek, silmek veya yönetmek oldukça basittir. Bir Memo ya da ListBox
bileşeninin öğelerini yönetmekle hemen hemen aynıdır. TStrings tipini
biraz bilmeniz yeterli.

Evet işimize yarayan özellikler bunlar. Şimdi ListView'a geri dönelim
isterseniz. ColumnClick ve Columns adı altında 2 özelliğimiz var dikkat
ettiyseniz. Bunlardan "Columns" ayrıntılı gösterimdeki sütunların
isimlerini temsil ediyor. Yani örneğin her öğenizin 2 alt
öğesi(subitem) var. O zaman "columns" bölümüne toplam 3 başlık
eklemeniz gerekiyor. Birincisi öğenin adının bulunduğu sütunun adı,
diğerleri de sırasıyla birinci ve ikinci alt öğelerin başlığı olacak.
ColumnClick özelliğini true yaparsanız bu sütunlara tıklanabilecek ve
siz bu tıklama olaylarını yönetebileceksiniz, ki bu iş genelde o
sütundaki alt öğeye göre sıralama yapmak için kullanılır.

Ve son 2 önemli özelliğimiz, SortType ve ViewStyle. Sort type alfabetik
sıralamanın neye göre yapılacağını belirtir. stNone bir sıralama
yapmazken stName sadece başlıklara göre, stData alt öğelere göre,
stBoth ise her iki bilgiye göre sıralama yapar. Ayrıca bunu stNone
yapıp kendi sıralama sisteminizi de geliştirebilirsiniz. Bunun için
ListView bileşeninizin onCompare olayına bir kaç kod yazmanız
gerekiyor. Ayrıca sıralama fonksiyonunun çalışması için de "AlphaSort"
metodunu çağırmalısınız.(Listview1.AlphaSort[Resimleri görebilmek için üye olun veya giriş yapın.] onCompare olayında size 2 tane TListItem
öğesi veriliyor ve siz buraya yazacağınız kodla hangisinin daha önce
gelmesi gerektiğini belirtiyorsunuz. Eğer Item1 daha önce gelmeliyse
Compare değerini sıfırdan küçük, daha sonra gelmeliyse Compare değerini
sıfırdan büyük yapmalısınız. Eğer ikisi de eşitse o zaman bu değeri 0
yapmanız gerekiyor. ViewStyle özelliği de aktif olan gösterim tipini
belirtiyor. vsIcon bildiğiniz "Büyük Simge" gösterimi, ve burada
LargeImages'a bağlı ImageList kullanılıyor. Diğer tüm modlarda
SmallIcons'a bağlı ImageList kullanılıyor. vsSmallIcons, küçük
simgeler; vsList, liste ve vsReport, ayrıntılı gösterimi temsil ediyor.
Bu değerleri program çalışırken de değiştirip farklı görünümler
arasında geçiş yapabilirsiniz.

Evet, bu kadar ön bilgiden sonra sanırım ListView bileşenimize çalışma
zamanı nasıl öğe ekleyip, bunları nasıl yöneteceğimizi öğrenmeye
hazırız. Öncelikle TListItem tipinde bir değişken tanımlamalısınız.
Daha sonra TListView.Items.Add fonksiyonuyla oluşturmalı, değişkenimize
bağlamalı ve gerekli düzenlemeleri yapmalısınız.

Bir ListView bileşeninde toplu ve büyük değişiklikler yapmadan önce
"BeginUpdate" ve bu işlemlerin sonunda da "EndUpdate" metodlarını
çağırmak işlem hızını oldukça arttıracaktır. Bu komutlar her değişiklik
olduğunda ekranın güncellenmesini engeller ve sonra işiniz bittiğinde
tüm değişikliğin bir defada gösterilmesini sağlar. ListView'un "Clear"
metodu, ListView'un içini güzelce temizler [Resimleri görebilmek için üye olun veya giriş yapın.].
Ayrıca istediğiniz öğeyi silebilir, öğelerin yerini değiştirebilir ve
daha başka birçok şey yapabilirsiniz. Hepsini burada anlatmam inanın
çok zor. Yalnız yazıyı bir örnekle bitirmek istiyorum.

Örneğimiz bir TStringList içinde depolanmış dosya
isimlerini ListView içinde göstermek. Ayrıca bu dosya isimlerinde dosya
yolları da var ve biz bunu ayırıp her dosyanın ilk alt öğesinin bu
dosyanın yolunu göstermesini de sağlayacağız.

Bunu yapmadan önce ImageList'imize istediğimiz simgeleri eklemeliyiz. Bunu yaptıktan sonra kodlara geçebiliriz:

var

Kod:
yeni:TListItem;

i:integer;

[b]begin[/b]

ListView1.Items.BeginUpdate; [i]//bahsettiğimiz güncelleme başlangıcı

[/i]ListView1.Clear; [i]//temizleyelim[/i]

[b]for[/b] i:=0 [b]to[/b] dosyalar.Count-1 [b]do[/b] [i]//TStringListimizin adının "dosyalar" olduğunu varsayalım[/i]

[b]begin[/b]

yeni:=Listview1.Items.Add; [i]//yeni öğeyi ekleyip ve rahatça düzenlemek için adresini değişkenimize atadık.[/i]

yeni.Caption:=ExtractFileName(dosyalar[i]); [i]//başlığını dosya adı yaptık[/i]

yeni.SubItems.Add(ExtractFilePath(dosyalar[i]); [i]//yolunu alt öğe olarak ekledik[/i]

yeni.ImageIndex:=1; [i]//burası size kalmış, resim indexi[/i]

[b]end;[/b]

ListView1.Items.EndUpdate; //değişiklik yapmayı bitirdik

end;

Evet yukarıdaki örnek kodların da yardımıyla TListView bileşenini daha
rahat ve etkin kullanabileceğinizi umuyorum. Kolay gelsin...

Burak Yiğit Kaya Byte Online'ın yazarlarındandır.
Kendisine [url=mailto:bykaya@byte.com.tr">bykaya@byte.com.tr[/url]
adresinden ulaşabilirsiniz.





Designer­s[Resimleri görebilmek için üye olun veya giriş yapın.]CyberDuck[Resimleri görebilmek için üye olun veya giriş yapın.]

%100 Netlebi Forum [Resimleri görebilmek için üye olun veya giriş yapın.] Kalitesiyle Her Hakkı Saklıdır!
Söz Uçar Yazı Kalır..!
Kullanıcı profilini gör http://sanalkolik.forum.st

Sayfa başına dön  Mesaj [1 sayfadaki 1 sayfası]

Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz