Delphi en TListView denetimi, sütun başlıklarında ve alt öğelerinde veya küçük veya büyük simgelerle dikey veya yatay olarak sütunlardaki öğelerin listesini görüntüler.
Çoğu Delphi kontrolünde olduğu gibi, TListView Tıklamada ve OnDblClick (OnDoubleClick) olayları.
Ne yazık ki, hangi öğenin tıklandığını veya çift tıklandığını bilmeniz gerekiyorsa, tıklanan öğeyi almak için OnClick / OnDblClick olaylarını işleyemezsiniz.
TListView için OnClick (OnDblClick) olayı, kullanıcı denetimi her tıklattığında tetiklenir - yani "tıklama" her gerçekleştiğinde kontrolün müşteri alanı içinde bir yerde.
Kullanıcı liste görünümünde tıklayabilir, ancak öğelerin herhangi birini "özledim". Dahası, liste görünümü ViewStyle özelliğine bağlı olarak görüntüsünü değiştirebildiğinden, kullanıcı bir öğeye, bir öğe başlığına, bir öğe simgesine, "hiçbir yere", bir öğe durumu simgesine tıklamış olabilir, vb.
Not: ViewStyle özelliği, öğelerin liste görünümünde nasıl görüntüleneceğini belirler: öğeler, bir dizi hareketli simge veya metin sütunları olarak görüntülenebilir.
Liste görünümü. Öğe üzerinde & ListView öğesini tıklayın. Öğe Üzerine Çift Tıklama
Liste görünümü için OnClick olayı tetiklendiğinde tıklatılan (varsa) öğeyi bulabilmek için, liste görünümünün öğeleri X ve Y parametreleri tarafından belirtilen noktanın altındadır - farenin şu andaki konumu "Tıklayın".
TListiew's GetHitTestInfoAt işlevi, liste görünümünün istemci alanında belirtilen nokta hakkındaki bilgileri döndürür.
Öğenin tıklandığından (veya çift tıklatıldığından) emin olmak için GetHitTestInfoAt öğesini çağırmanız ve yalnızca gerçek bir öğede click olayı meydana geldiğinde tepki vermeniz gerekir.
İşte ListView1'in OnDblClick olayının örnek bir uygulaması:
// ListView1'leri Çift Tıklamada işlerprosedür TForm.ListView1DblClick(Gönderen: TObject);
var
hts: THitTest'ler;
ht: THitTest;
sht: sicim;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
başla
// ListView ile ilişkili fare imlecinin konumu
ListViewCursosPos: = ListView1.ScreenToClient (Fare. CursorPos);
// nerede çift tıklayın?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// "hata ayıklama" hit testi
Başlık: = '';
için ht içinde hts yapmak
başla
sht: = GetEnumName (TypeInfo (THitTest), Tamsayı (ht));
Altyazı: = Biçim ('% s% s |', [Altyazı, sht]);
son;
// çift tıklanan öğeyi bulun
Eğer hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] sonra
başla
selectedItem: = ListView1.Selected;
// çift tıklanan öğeyle bir şeyler yapın!
Altyazı: = Biçim ('DblClcked:% s', [selectedItem. Altyazı]);
son;
son;
OnDblClick (veya OnClick) olay işleyicisinde, denetimin "içinde" farenin konumunu sağlayarak GetHitTestInfoAt işlevini okuyun. Farenin liste görünümü ile ilgili konumunu elde etmek için, ScreenToClient işlevi ekran koordinatlarındaki bir noktayı (fare X ve Y) yerel veya istemci alanı koordinatlarına dönüştürmek için kullanılır.
GetHitTestInfoAt değeri THitTests yazın. THitTests bir dizi THitTest numaralandırılmış değerler.
Bu Test sayım değerleri, açıklamalarıyla birlikte:
- htAbove - müşteri alanının üzerinde.
- htBelow - müşteri alanının altında.
- htNowhere - kontrolün içinde, ancak bir öğenin üzerinde değil.
- htOnItem - bir öğede, metninde veya bit eşleminde.
- htOnButton - bir düğme üzerinde.
- htOnIcon - bir simge üzerinde.
- htOnIndent - bir öğenin girintili alanında.
- htOnLabel - bir etikette.
- htOnRight - öğenin sağ tarafında.
- htOnStateIcon - bir öğeyle ilişkilendirilmiş durum simgesinde veya bitmapte.
- htToLeft - müşteri alanının solunda.
- htToRight - müşteri alanının sağında.
GetHitTestInfoAt çağrısının sonucu bir alt küme (Delphi kümeleri!) [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] öğesinden kullanıcının öğeyi (veya simge / durum simgesini) tıkladığından emin olabilirsiniz.
Son olarak, yukarıdakiler doğruysa, seçilmiş özelliği, liste görünümünde ilk seçilen öğeyi (birden çok öğe seçilebiliyorsa) döndürür. Tıklanan / çift tıklanan / seçilen öğeyle bir şeyler yapın ...
Kodu keşfetmek ve benimseyerek öğrenmek için tam kaynak kodunu indirdiğinizden emin olun.