TListView İçin Kendi CheckBox Resmini Kullanmak

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 02:38

TListView İçin Kendi CheckBox Resmini Kullanmak

Mesaj gönderen RamazanG » 07 Eki 2010 04:09

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

ListView’in kendi CheckBoxeları çirkin kendi oluşturduğumuz Grafikleri Kullanalım.

Resim

TListView’in ViewStyle özellğini vsReport ve CheckBoxes özelliğini true yaptığımız zaman list view içinde check boxlar listenin kenarına eklenir.

Dizayn zamanında check box kullanmak kullanışlı ve güzel görünüşlüdür ama standart Checkbox "Çirkin", kenar kalınlıkları 2 pixel ve hiçbir özelliğini değiştiremezsin.

ListView İçinde "Güzel" CheckBoxlar

Güzel görünüşlü check boxlar oluşturmanın bir yolu kendi grafik (16x16 px bitmap resmi) kullanmak ve orjinal checkboxları değiştirmektir.
OnAdvancedCustomDrawItem olayı, OwnerDraw olayı false iken(varsayılan) yeni grafik oluşturmayı destekler.
CheckBox kullanırken 2 resim kullanarak görüntüyü daha hoş hale getirebilirsin. TImageList içine iki resim ekle biri checked = true iken, diğeri checked = false iken görünecek.

Listview OnAdvancedCustomDrawItem

Kod: Tümünü seç

 procedure TListViewForm.listViewAdvancedCustomDrawItem(
   Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
   Stage: TCustomDrawStage; var DefaultDraw: Boolean);
 var
   r : TRect;
 begin
   r := item.DisplayRect(drIcon);
 
   if stage = cdPostPaint then
   if item.Checked then
     stateImages.Draw(Sender.Canvas, r.Left - 16, r.Top, 1)
   else
     stateImages.Draw(Sender.Canvas, r.Left - 16, r.Top, 2);
 end;
Malesef TListView "Checked" olayını algılamaz.
Not:
1. TListView’in ViewStyle özelliği vsReport olmalı. Tabiki Checkboxes özelliğide true olmalı.
2. AdvancedCustomDrawItem olayı hakkındaki yardımı okumalısın bu sayede benzer yöntemle Stages, States, DisplayRect... özelliklerinide kullanabilirsin

Kod: Tümünü seç

 procedure TListViewForm.FormCreate(Sender: TObject) ;
 begin
   listView.Checkboxes := true;
   listView.ViewStyle := vsReport;
 end;
Bu örnek basit ama güçlü bir yöntemdir...

Cevapla