Delphis TListView-kontrol viser en liste over elementer i kolonner med kolonneoverskrifter og underelementer eller lodret eller vandret med små eller store ikoner.
Som de fleste Delphi-kontroller udsætter TListView OnClick og OnDblClick (OnDoubleClick) begivenheder.
Desværre, hvis du har brug for at vide, hvad der blev klikket på eller dobbeltklikket på, kan du ikke blot håndtere OnClick / OnDblClick-begivenhederne for at få det klikkede emne.
Begivenheden OnClick (OnDblClick) til TListView affyres, hver gang brugeren klikker på kontrollen - det er hver gang "klik" opstår et sted inden i klientområdet for kontrollen.
Brugeren kan klikke inde i listevisningen, MEN "gå glip af" nogle af elementerne. Hvad mere er, da listevisning kan ændre dets display afhængigt af egenskaben ViewStyle, brugeren har muligvis klikket på et element, på en varetekst, på et elementikon, "ingen steder", på et elementstatusikon, etc.
Bemærk: egenskaben ViewStyle bestemmer, hvordan elementer vises i listevisningen: elementerne kan vises som et sæt bevægelige ikoner eller som tekstsøjler.
Listevisning. Klik på & ListeVis på varen. Dobbeltklik på varen
For at være i stand til at lokalisere det klikkede (hvis der er et) element, når OnClick-begivenheden til listevisningen affyres, skal du bestemme, hvad elementer i listevisningen ligger under det punkt, der er specificeret af X- og Y-parametrene - det er musens placering i øjeblikket "Klik".
TListiews GetHitTestInfoAt funktion returnerer oplysninger om det specificerede punkt i listevisningens klientområde.
For at sikre, at der blev klikket på (eller dobbeltklikket på), skal du ringe til GetHitTestInfoAt og kun reagere, hvis klikhændelsen fandt sted på en faktisk vare.
Her er et eksempel på implementering af ListView1's OnDblClick-begivenhed:
// håndterer ListView1's ved dobbeltklikprocedure TForm.ListView1DblClick(Afsender: TObject);
Var
hts: THitTests;
ht: THitTest;
SHT: snor;
ListViewCursosPos: TPoint;
valgtItem: TListItem;
begynde
// placering af musemarkøren relateret til ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mus. MarkørPos);
// dobbeltklik hvor?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// "debug" hit test
Billedtekst: = '';
til ht i hts gøre
begynde
sht: = GetEnumName (TypeInfo (THitTest), heltal (ht));
Billedtekst: = Format ('% s% s |', [Billedtekst, sht]);
ende;
// Find det dobbeltklikkede emne
hvis hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] derefter
begynde
valgtItem: = ListView1.Valget;
// gør noget med det dobbeltklikkede emne!
Billedtekst: = Format ('DblClcked:% s', [valgtItem. Billedtekst]);
ende;
ende;
I begivenhedshåndtereren OnDblClick (eller OnClick) skal du læse GetHitTestInfoAt-funktionen ved at give den placeringen af musen "inde" i kontrollen. For at få placeringen af musen relateret til listevisningen bruges funktionen ScreenToClient til at konvertere et punkt (mus X og Y) i skærmkoordinater til lokale eller klientområde, koordinater.
GetHitTestInfoAt returnerer en værdi på THitTests type. THitTests er et sæt af THitTest tællede værdier.
THITTEST tælling værdier med deres beskrivelse er:
- htAbove - over klientområdet.
- htBelow - under klientområdet.
- htNowhere - inde i kontrollen, men ikke på en vare.
- htOnItem - på et emne, dets tekst eller dets bitmap.
- htOnButton - på en knap.
- htOnIcon - på et ikon.
- htOnIndent - på det indrykkede område af en vare.
- htOnLabel - på en etiket.
- htOnRight - på højre side af en vare.
- htOnStateIcon - på et tilstandsikon eller bitmap, der er knyttet til et element.
- htToLeft - til venstre for klientområdet.
- htToRight - til højre for klientområdet.
Hvis resultatet af opkaldet til GetHitTestInfoAt er et delmængde (Delphi sæt!) af [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] kan du være sikker på, at brugeren har klikket på emnet (eller på dets ikon / tilstandsikon).
Endelig, hvis ovenstående er sandt, skal du læse Valgte egenskab for listevisningen, returnerer det det første valgte element (hvis der kan vælges flere) i listevisningen. Gør noget med det klikkede / dobbeltklikkede / valgte element ...
Sørg for at downloade den fulde kildekode for at udforske koden og lære ved at vedtage den.