Delphi Kontrol TListView menampilkan daftar item dalam kolom dengan tajuk dan sub-item kolom, atau vertikal atau horizontal, dengan ikon kecil atau besar.
Seperti kebanyakan kontrol Delphi, TListView memperlihatkan OnClick dan OnDblKlik (OnDoubleClick) acara.
Sayangnya, jika Anda perlu tahu item apa yang diklik atau diklik ganda, Anda tidak bisa begitu saja menangani acara OnClick / OnDblClick untuk mendapatkan item yang diklik.
Acara OnClick (OnDblClick) untuk TListView dipecat setiap kali pengguna mengklik kontrol - yaitu setiap kali "klik" terjadi suatu tempat di dalam area klien dari kontrol.
Pengguna dapat mengklik di dalam tampilan daftar, TAPI "kehilangan" salah satu item. Terlebih lagi, karena tampilan daftar dapat mengubah tampilannya tergantung pada properti ViewStyle, pengguna mungkin telah mengklik item, pada keterangan item, pada ikon item, "tidak ada", pada ikon status item, dll.
Catatan: properti ViewStyle menentukan bagaimana item ditampilkan dalam tampilan daftar: item dapat ditampilkan sebagai satu set ikon bergerak, atau sebagai kolom teks.
ListView. Pada Klik Item & ListView. Pada Item Klik Dua Kali
Untuk dapat menemukan item yang diklik (jika ada) ketika acara OnClick untuk tampilan daftar dipecat, Anda perlu menentukan apa elemen tampilan daftar berada di bawah titik yang ditentukan oleh parameter X dan Y - yaitu lokasi mouse saat ini "klik".
TListiew GetHitTestInfoAt fungsi mengembalikan informasi tentang titik yang ditentukan di area klien tampilan daftar.
Untuk memastikan item diklik (atau diklik dua kali) Anda perlu memanggil GetHitTestInfoAt dan bereaksi hanya jika peristiwa klik terjadi pada item yang sebenarnya.
Berikut adalah contoh implementasi dari acara OnDblClick ListView1:
// menangani On Double Click pada ListView1prosedur TForm.ListView1DblKlik(Pengirim: TObject);
var
hts: THTTests;
ht: THitTest;
sht: tali;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
mulai
// posisi kursor mouse yang terkait dengan ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mouse. CursorPos);
// klik dua kali di mana?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// uji debug "debug"
Keterangan: = '';
untuk ht di hts melakukan
mulai
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Keterangan: = Format ('% s% s |', [Keterangan, sht]);
akhir;
// temukan item yang diklik ganda
jika hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] kemudian
mulai
selectedItem: = ListView1.Selected;
// lakukan sesuatu dengan item yang diklik ganda!
Keterangan: = Format ('DblClcked:% s', [selectedItem. Keterangan]);
akhir;
akhir;
Di event handler OnDblClick (atau OnClick), baca fungsi GetHitTestInfoAt dengan menyediakan lokasi mouse "di dalam" kontrol. Untuk mendapatkan lokasi mouse yang terkait dengan tampilan daftar, fungsi ScreenToClient digunakan untuk mengonversi titik (mouse X dan Y) dalam koordinat layar ke koordinat lokal, atau area klien,.
GetHitTestInfoAt mengembalikan nilai Ujian Tipe. The THitTests adalah seperangkat Tes terbaik nilai yang disebutkan.
The THitTest enumerasi nilai, dengan uraiannya, adalah:
- htAbove - di atas area klien.
- di bawah - di bawah area klien.
- di sini - di dalam kontrol, tetapi tidak pada item.
- htOnItem - pada item, teksnya, atau bitmapnya.
- htOnButton - pada sebuah tombol.
- htOnIcon - pada ikon.
- htOnIndent - pada area lekukan item.
- htOnLabel - pada label.
- htOnRight - di sebelah kanan item.
- htOnStateIcon - pada ikon negara atau bitmap yang terkait dengan suatu item.
- htToLeft - di sebelah kiri area klien.
- htToRight - di sebelah kanan area klien.
Jika hasil panggilan ke GetHitTestInfoAt adalah a subset (Delphi set!) dari [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] Anda dapat memastikan pengguna mengklik item tersebut (atau pada ikon / ikon ikonnya).
Akhirnya, jika hal di atas benar, baca Terpilih properti dari tampilan daftar, ini mengembalikan item yang dipilih pertama (jika beberapa dapat dipilih) dalam tampilan daftar. Lakukan sesuatu dengan item yang diklik / diklik ganda / dipilih ...
Pastikan untuk mengunduh kode sumber lengkap untuk menjelajahi kode dan belajar dengan mengadopsinya.