Implementace na položku Click / Double Click pro TListView

Delphi je Ovládací prvek TListView zobrazuje seznam položek ve sloupcích se záhlavími sloupců a podpoložkami, nebo svisle nebo vodorovně, s malými nebo velkými ikonami.

Stejně jako většina ovládacích prvků Delphi i TListView vystavuje Při kliknutí a OnDblClick (OnDoubleClick) události.

Bohužel, pokud potřebujete vědět, na kterou položku bylo kliknuto nebo dvakrát kliknuto, nemůžete jednoduše zpracovat události OnClick / OnDblClick a získat tak kliknutou položku.

Událost OnClick (OnDblClick) pro TListView je spuštěna pokaždé, když uživatel klepne na ovládací prvek - to je pokaždé, když dojde k „kliknutí“ někde uvnitř klientské oblasti kontroly.

Uživatel může kliknout dovnitř zobrazení seznamu, ALE „chybět“ kteroukoli z položek. A co víc, protože zobrazení seznamu může změnit jeho zobrazení v závislosti na vlastnosti ViewStyle, na uživateli mohl kliknout na položku, na popisek položky, na ikonu položky „nikde“, na ikonu stavu položky, atd.

Poznámka: vlastnost ViewStyle určuje, jak se položky zobrazí v zobrazení seznamu: položky lze zobrazit jako sadu pohyblivých ikon nebo jako sloupce textu.

instagram viewer

Zobrazení seznamu. Na položku klikněte a zobrazte seznam. Na položku poklepejte

Aby bylo možné najít kliknutou položku (pokud existuje) při spuštění události OnClick pro zobrazení seznamu, musíte určit, co Prvky zobrazení seznamu leží pod bodem určeným parametry X a Y - to je umístění myši v okamžiku "kliknout".

TListiew je GetHitTestInfoAt funkce vrací informace o zadaném bodu v klientské oblasti zobrazení seznamu.

Chcete-li se ujistit, že na položku bylo kliknuto (nebo dvakrát kliknuto), musíte zavolat GetHitTestInfoAt a reagovat pouze v případě, že k události kliknutí došlo u skutečné položky.

Zde je příklad implementace události OnDblClick ListView1:

// obsluhuje ListView1's On Double Clickpostup TForm.ListView1DblClick(Odesílatel: TObject);
var
hts: THitTests;
ht: THitTest;
sht: tětiva;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
začít
// pozice kurzoru myši ve vztahu k ListView
ListViewCursosPos: = ListView1.ScreenToClient (Myš. CursorPos);
// dvojklikem kde?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// test ladění „ladění“
Titulek: = '';
pro ht v hts dělat
začít
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Titulek: = Formát ('% s% s |', [Titulek, sht]);
konec;
// najděte položku s dvojitým kliknutím
-li hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] pak
začít
selectedItem: = ListView1.Selected;
// udělejte něco s položkou s dvojitým kliknutím!
Titulek: = Format ('DblClcked:% s', [selectedItem. Titulek]);
konec;
konec;

V obslužné rutině události OnDblClick (nebo OnClick) si přečtěte funkci GetHitTestInfoAt poskytnutím umístění myši "uvnitř" ovládacího prvku. Chcete-li získat umístění myši vztahující se k zobrazení seznamu, funkce ScreenToClient se používá k převodu bodu (myši X a Y) v souřadnicích obrazovky na místní nebo klientské oblasti, souřadnice.

GetHitTestInfoAt vrátí hodnotu Testy typ. Testy THitTests jsou sady THitTest enumerované hodnoty.

THE THitTest výčet hodnoty s jejich popisem jsou:

  • htAbove - nad oblastí klienta.
  • htBelow - pod klientskou oblastí.
  • htNewherehere - uvnitř ovládacího prvku, ale ne u položky.
  • htOnItem - u položky, jejího textu nebo bitmapy.
  • htOnButton - na tlačítku.
  • htOnIcon - na ikonu.
  • htOnIndent - na odsazené oblasti položky.
  • htOnLabel - na štítku.
  • htOnRight - na pravé straně položky.
  • htOnStateIcon - na ikonu stavu nebo bitmapu přiřazenou k položce.
  • htToLeft - vlevo od oblasti klienta.
  • htToRight - napravo od oblasti klienta.

Pokud je výsledkem volání GetHitTestInfoAt a podmnožina (sady Delphi!) z [htOnIcon, htOnItem, htOnLabel, htOnStateIcon], můžete si být jisti, že uživatel klikl na položku (nebo na její ikonu / ikonu stavu).

A konečně, pokud výše uvedené platí, přečtěte si Vybraný Vlastnost zobrazení seznamu vrátí první vybranou položku (pokud lze vybrat více) v zobrazení seznamu. Udělejte něco s kliknutou / poklepanou / vybranou položkou ...

Nezapomeňte si stáhnout celý zdrojový kód, abyste jej prozkoumali a učili se jeho přijetím.

instagram story viewer