TListView Tıklanan Nesneyi Algılamak

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

TListView Tıklanan Nesneyi Algılamak

Mesaj gönderen RamazanG »

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



Resim

ListView tıklandığı zaman OnClick olayı tıklanan nesneyi algılıyabilir, bizde X ve Y deiğişkenlerini kullanarak ListView’den tıklı nesneyi algılayarak kullanabiliriz.
TListVew'in GetHitTestInfoAt uygulaması belirtilen bölgedeki bilgileri algılar.
Bir tıklama olduğundan emin ol daha sonra GetHitTestInfoAt uygulaması çağırılacak.

ListView1'in DoubleClick olayına bir handle

Kod: Tümünü seç

procedure TForm.ListView1DblClick(Sender: TObject) ;
 var
   hts : THitTests;
   ht : THitTest;
   sht : string;
   ListViewCursosPos : TPoint;
 
   selectedItem : TListItem;
 begin
   {ListView içinde fare imlecinin işaret ettiği nesnenin pozisyonu}
   ListViewCursosPos := ListView1.ScreenToClient(Mouse.CursorPos) ;
 
   {Nereye çift tıklandı?}
   hts := ListView1.GetHitTestInfoAt(ListViewCursosPos.X, ListViewCursosPos.Y) ;
 
   {"debug" tıklama testi}
   Caption := '';
   for ht in hts do
   begin
     sht := GetEnumName(TypeInfo(THitTest), Integer(ht)) ;
     Caption := Format('%s %s | ',[Caption, sht]) ;
   end;
 
   {Çift tıklanan nesnenin yeri}
   if hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] then
   begin
     selectedItem := ListView1.Selected;
 
     {Çift tıklanan nesneyle birşeyler yap}
     Caption := Format('DblClcked : %s',[selectedItem.Caption]) ;
   end;
 end;
OnDblClick (ya da OnClick) olayı, farenin altındaki kontrolden GetHitTestInfoAt uygulamasıyla alan algılaması yapar. Farenin işaret ettiği yeri ListView’den algılamak için ScreenToClient uygulaması (farenin X ve Y) koordinatlarını ile algılar.

GetHitTestInfoAt değerleri THitTests türünün geri dönen değerleridir. ThitTest’ler THitTest numaralandırılmış değerleridir.

THitTest değerlerinin açıklamaları:

htAbove – Yukarıdaki alan.
htBelow – Aşşağıdaki alan.
htNowhere – Kontrolün içi ama nesnenin üzeri değil.
htOnItem – Nesnenin üzeri, bu bir metin ya da bitmap resmi.
htOnButton – Button üzeri.
htOnIcon - İkon üzeri.
htOnIndent – Nesnenin kalıtım (indented) alanı.
htOnLabel – Label üzeri.
htOnRight – Nesnenin sağ tarafının üzeri.
htOnStateIcon – Bir nesneyle oluşturulmuş İkon ya da bitmap’ın nesne üzerindeki yeri.
htToLeft – Nesnenin Sol tarafı.
htToRight – Nesnenin sağ tarafı.


Eğer GetHitTestInfoAt in dönen sonucu [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] ise kullanıcının metine (ya da ikon / ikon bölgesi) tıklandığına emin olun.

Sonunda, yukarısı doğru ise ListView seçme özelliğ(Selected), ilk seçilen nesneyi (ya da ilk seçilen nesneleri)geri döndürür. Artık tıklanan(ya da çift tıklanan) nesnelerle istediğini yapabilirsin.
Cevapla