Delphi Controlul TListView afișează o listă de elemente din coloane cu anteturi și sub-elemente, sau vertical sau orizontal, cu pictograme mici sau mari.
La fel ca majoritatea controalelor Delphi, TListView expune OnClick și OnDblClick (OnDoubleClick) evenimente.
Din păcate, dacă trebuie să știți ce element a făcut clic sau faceți dublu clic, nu puteți trata pur și simplu evenimentele OnClick / OnDblClick pentru a obține elementul dat clic.
Evenimentul OnClick (OnDblClick) pentru TListView este lansat de fiecare dată când utilizatorul face clic pe control - adică de fiecare dată când apare „clicul”. undeva în zona clientului a controlului.
Utilizatorul poate face clic în vizualizarea listei, DAR „lipsește” oricare dintre elemente. Mai mult, din moment ce vizualizarea listei își poate schimba afișarea în funcție de proprietatea ViewStyle, a utilizatorului este posibil să fi făcut clic pe un articol, pe o legendă a unui articol, pe o pictogramă a articolului, „nicăieri”, pe o pictogramă de stare a unui articol, etc.
Notă: proprietatea ViewStyle determină modul în care elementele sunt afișate în vizualizarea listei: elementele pot fi afișate ca un set de icoane mobile sau ca coloane de text.
ListView. Pe articol Faceți clic pe & Listă Vizualizare. La element dublu clic
Pentru a putea localiza elementul pe care s-a făcut clic (dacă există unul) când evenimentul OnClick pentru vizualizarea listei este activat, trebuie să determinați ce elemente ale vizualizării listei se află sub punctul specificat de parametrii X și Y - adică locația mouse-ului la momentul "clic".
TListiew's GetHitTestInfoAt funcția returnează informații despre punctul specificat din zona clientului vizualizării listei.
Pentru a vă asigura că articolul a fost făcut clic (sau dublu clic), trebuie să apelați la GetHitTestInfoAt și să reacționați numai dacă evenimentul de clic a avut loc pe un element real.
Iată un exemplu de implementare a evenimentului OnDblClick al ListView1:
// gestionează pe Double Click pe ListView1procedură TForm.ListView1DblClick(Expeditor: TObject);
var
hts: THitTests;
ht: THitTest;
SHT: şir;
ListViewCursosPos: TPoint;
selectat Item: TListItem;
începe
// poziția cursorului mouse-ului în legătură cu ListView
ListViewCursosPos: = ListView1.ScreenToClient (mouse. CursorPos);
// dublu clic unde?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// Testul de succes „debug”
Subtitrare: = '';
pentru ht în hts do
începe
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Legenda: = Format ('% s% s |', [Legenda, sht]);
Sfârșit;
// localizați elementul cu dublu clic
dacă hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] apoi
începe
selectedItem: = ListView1.Selected;
// fă ceva cu elementul dublu-clic!
Subtitrare: = Format ('DblClcked:% s', [SelectItem. Subtitrare]);
Sfârșit;
Sfârșit;
În manipulatorul de evenimente OnDblClick (sau OnClick), citiți funcția GetHitTestInfoAt oferindu-i locația mouse-ului „în interiorul” controlului. Pentru a obține locația mouse-ului în legătură cu vizualizarea listei, funcția ScreenToClient este utilizată pentru a converti un punct (X și Y mouse) în coordonatele ecranului în coordonate locale sau client.
GetHitTestInfoAt returnează o valoare a THitTests tip. The THitTests este un set de THitTest valori enumerate.
The THitTest enumerare valorile, cu descrierea lor, sunt:
- htAbove - deasupra zonei clientului.
- htBelow - sub zona clientului.
- htNowhere - în interiorul controlului, dar nu pe un articol.
- htOnItem - pe un articol, textul sau harta sa de biți.
- htOnButton - pe un buton.
- htOnIcon - pe o icoană.
- htOnIndent - pe zona indentată a unui articol.
- htOnLabel - pe o etichetă.
- htOnRight - în partea dreaptă a unui articol.
- htOnStateIcon - pe o pictogramă de stat sau o hartă de bit asociate cu un element.
- htToLeft - în stânga zonei clientului.
- htToRight - în dreapta zonei clientului.
Dacă rezultatul apelului la GetHitTestInfoAt este un subset (Delphi setează!) din [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] puteți fi sigur că utilizatorul a dat clic pe element (sau pe pictograma / starea acestuia).
În cele din urmă, dacă cele de mai sus sunt adevărate, citiți Selectat proprietatea vizualizării listei, returnează primul articol selectat (dacă pot fi selectate mai multe) în vizualizarea listei. Faceți ceva cu elementul clic / dublu clic / selectat ...
Asigurați-vă că descărcați codul sursă complet pentru a explora codul și aflați prin adoptarea acestuia.