Delphi Ovládací prvok TListView zobrazuje zoznam položiek v stĺpcoch so záhlaviami stĺpcov a podpoložkami alebo vertikálne alebo horizontálne s malými alebo veľkými ikonami.
Rovnako ako väčšina ovládacích prvkov Delphi, TListView vystavuje Po kliknutí a OnDblClick (OnDoubleClick) udalosti.
Bohužiaľ, ak potrebujete vedieť, na ktorú položku sa kliklo alebo dvakrát kliklo, jednoducho nemôžete zvládnuť udalosti OnClick / OnDblClick a získať tak kliknutú položku.
Udalosť OnClick (OnDblClick) pre TListView je spustená vždy, keď používateľ klikne na ovládací prvok - to znamená vždy, keď dôjde k kliknutiu niekde v klientskej oblasti kontroly.
Užívateľ môže kliknúť dovnútra zobrazenia zoznamu, ALE "zmeškať" ktorúkoľvek z položiek. A čo viac, pretože zobrazenie zoznamu môže zmeniť jeho zobrazenie v závislosti od vlastnosti ViewStyle, od používateľa mohol kliknúť na položku, na názov položky, na ikonu položky „nikde“ na ikonu stavu položky, atď.
Poznámka: vlastnosť ViewStyle určuje, ako sa položky zobrazia v zobrazení zoznamu: položky sa môžu zobraziť ako množina pohyblivých ikon alebo ako stĺpce textu.
ListView. Na položku kliknite a zobrazte zoznam. Dvakrát kliknite na položku
Aby bolo možné nájsť kliknutú položku (ak existuje) pri spustení udalosti OnClick pre zobrazenie zoznamu, musíte určiť, čo prvky zoznamu sú umiestnené pod bodom určeným parametrami X a Y - to je umiestnenie myši v okamihu "Click".
TListiew je GetHitTestInfoAt Funkcia vráti informácie o zadanom bode v klientskej oblasti zobrazenia zoznamu.
Na zabezpečenie kliknutia na položku (alebo dvojitého kliknutia) musíte zavolať GetHitTestInfoAt a reagovať, iba ak sa udalosť kliknutia vyskytla na skutočnej položke.
Tu je príklad implementácie udalosti OnDblClick ListView1:
// rukoväte ListView1's On Double Clickprocedúra TForm.listView1DblClick(Odosielateľ: TObject);
var
hts: Testy;
ht: THitTest;
SHT: povrázok;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
začať
// pozícia kurzora myši vo vzťahu k ListView
ListViewCursosPos: = ListView1.ScreenToClient (Myš. CursorPos);
// dvojité kliknutie kde?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// test ladenia „ladenia“
Titulok: = '';
pre ht v hts robiť
začať
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Titulok: = Format ('% s% s |', [Titulok, sht]);
koniec;
// vyhľadajte položku, na ktorú ste dvakrát klikli
ak hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] potom
začať
selectedItem: = ListView1.Selected;
// urobte niečo s položkou s dvojitým kliknutím!
Titulok: = Format ('DblClcked:% s', [selectedItem. Titulok]);
koniec;
koniec;
V obsluhe udalostí OnDblClick (alebo OnClick) si prečítajte funkciu GetHitTestInfoAt poskytnutím umiestnenia myši „vnútri“ ovládacieho prvku. Na získanie polohy myši súvisiacej so zoznamom sa funkcia ScreenToClient používa na prevod bodu (myši X a Y) v súradniciach obrazovky na lokálne alebo klientske súradnice.
GetHitTestInfoAt vráti hodnotu THitTests typu. Testy THitTests sú sady THitTest vymenované hodnoty.
Najnovšie výpočet hodnoty s ich popisom sú:
- htAbove - nad oblasťou klienta.
- htBelow - pod oblasťou klienta.
- htNowhere - vnútri ovládacieho prvku, ale nie na položke.
- htOnItem - na položke, jej texte alebo jej bitovej mape.
- htOnButton - na gombík.
- htOnIcon - na ikonu.
- htOnIndent - na odsadenú oblasť položky.
- htOnLabel - na štítku.
- htOnRight - na pravej strane položky.
- htOnStateIcon - na stavovej ikone alebo bitovej mape priradenej k položke.
- htToLeft - naľavo od oblasti klienta.
- htToRight - napravo od oblasti klienta.
Ak je výsledkom volania na GetHitTestInfoAt a podmnožina (sady Delphi!) z [htOnIcon, htOnItem, htOnLabel, htOnStateIcon], môžete si byť istí, že používateľ klikol na položku (alebo na ikonu s ikonou / stav).
Nakoniec, ak je vyššie uvedené, prečítajte si Vybraný vlastnosť zobrazenia zoznamu, vráti prvú vybranú položku (ak je možné vybrať viac) v zobrazení zoznamu. Urobte niečo s položkou kliknutia / dvojitého kliknutia / vybratej položky ...
Nezabudnite si stiahnuť celý zdrojový kód, aby ste ho preskúmali a naučili sa jeho prijatím.