Implementering av artikel Klicka / dubbelklicka för TListView

click fraud protection

Delphis TListView-kontrollen visar en lista över objekt i kolumner med kolumnrubriker och underobjekt, eller vertikalt eller horisontellt, med små eller stora ikoner.

Liksom de flesta Delphi-kontroller exponerar TListView OnClick och OnDblClick (OnDoubleClick) -händelser.

Tyvärr, om du behöver veta vilket objekt som klickades eller dubbelklickade kan du inte bara hantera händelserna OnClick / OnDblClick för att få det klickade objektet.

Händelsen OnClick (OnDblClick) för TListView avfyras varje gång användaren klickar på kontrollen - det är när "klick" inträffar någonstans inne i klientområdet för kontrollen.

Användaren kan klicka i listvyn, MEN "missa" något av objekten. Dessutom, eftersom listvy kan ändra dess visning beroende på ViewStyle-egenskapen, användaren kanske har klickat på ett objekt, på en artikeltexter, på en objektikon, "ingenstans", på en objektstatusikon, etc.

Obs! Egenskapen ViewStyle bestämmer hur objekt ska visas i listvyn: objekten kan visas som en uppsättning rörliga ikoner eller som kolumner med text.

instagram viewer

Listvy. Klicka på & ListView på artikeln. Dubbelklicka på artikeln

För att kunna hitta det klickade (om det finns ett) objekt när OnClick-händelsen för listvyn avfyras måste du bestämma vad element i listvyen ligger under den punkt som anges av X- och Y-parametrarna - det är musens plats just nu "klick".

TListiews GetHitTestInfoAt -funktionen ger information om den angivna punkten i listvyens klientområde.

För att se till att objektet klickades (eller dubbelklickades) måste du ringa GetHitTestInfoAt och bara reagera om klickhändelsen inträffade på ett faktiskt objekt.

Här är ett exempel på implementering av ListView1: s OnDblClick-händelse:

// hanterar ListView1: s med dubbelklickprocedur TForm.ListView1DblClick(Avsändare: TObject);
var
hts: THitTests;
ht: THitTest;
SHT: sträng;
ListViewCursosPos: TPoint;
valdItem: TListItem;
Börja
// placering av muspekaren relaterad till ListView
ListViewCursosPos: = ListView1.ScreenToClient (mus. CursorPos);
// dubbelklicka var?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// "felsökning" hittest
Bildtext: = '';
för ht i hts do
Börja
sht: = GetEnumName (TypeInfo (THitTest), heltal (ht));
Bildtext: = Format ('% s% s |', [Bildtext, sht]);
slutet;
// hitta det dubbelklickade objektet
om hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] sedan
Börja
valdItem: = ListView1.Valt;
// gör något med det dubbelklickade objektet!
Bildtext: = Format ('DblClcked:% s', [valdItem. Bildtext]);
slutet;
slutet;

I Händelseshanteraren OnDblClick (eller OnClick) läser du GetHitTestInfoAt-funktionen genom att ge den platsen för musen "inuti" kontrollen. För att få platsen för musen relaterad till listvyen används funktionen ScreenToClient för att konvertera en punkt (mus X och Y) i skärmkoordinater till lokala, eller klientområde, koordinater.

GetHitTestInfoAt returnerar ett värde på THitTests typ. THitTests är en uppsättning av THitTest uppräknade värden.

THITTest uppräkning värden med deras beskrivning är:

  • htAbove - ovanför klientområdet.
  • htBelow - under klientområdet.
  • htNowhere - inuti kontrollen, men inte på en artikel.
  • htOnItem - på ett objekt, dess text eller bitmapp.
  • htOnButton - på en knapp.
  • htOnIcon - på en ikon.
  • htOnIndent - på det intryckta området på en artikel.
  • htOnLabel - på en etikett.
  • htOnRight - till höger om en artikel.
  • htOnStateIcon - på en tillståndsikon eller bitmapp som är associerad med ett objekt.
  • htToLeft - till vänster om klientområdet.
  • htToRight - till höger om klientområdet.

Om resultatet av samtalet till GetHitTestInfoAt är en delmängd (Delphi-uppsättningar!) av [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] kan du vara säker på att användaren klickade på objektet (eller på dess ikon / statusikon).

Slutligen, om ovanstående är sant, läs Vald egenskapen i listvyen returnerar den det första valda objektet (om flera kan väljas) i listvyn. Gör något med det klickade / dubbelklickade / valda objektet ...

Se till att ladda ner hela källkoden för att utforska koden och lära dig genom att använda den.

instagram story viewer