Изпълнение на щракване върху елемент / двойно кликване за TListView

на Delphi Контролът TListView показва списък с елементи в колони с колони и подпозиции или вертикално или хоризонтално с малки или големи икони.

Както повечето Delphi контроли, TListView излага OnClick и OnDblClick (OnDoubleClick) събития.

За съжаление, ако трябва да знаете какъв елемент е щракнат или щракнат два пъти, не можете просто да се справите със събитията OnClick / OnDblClick, за да получите този клик.

Събитието OnClick (OnDblClick) за TListView се задейства всеки път, когато потребителят кликне върху контролата - това е винаги, когато се появи „щракването“ някъде в клиентската зона на контрола.

Потребителят може да кликне вътре в изгледа на списъка, но НЕ „пропуска“ някой от елементите. Нещо повече, тъй като изгледът на списъка може да промени дисплея си в зависимост от свойството ViewStyle, потребителя може да сте щракнали върху елемент, върху надпис на елемент, върху икона на елемент, „никъде“, върху икона на състояние на елемент, и т.н.

Забележка: Свойството ViewStyle определя как елементите се показват в изгледа на списъка: елементите могат да бъдат показани като набор от подвижни икони или като колони с текст.

instagram viewer

ListView. На щракване върху елемент и списък. На елемент Двойно щракване

За да можете да намерите кликвания (ако има такъв) елемент, когато събитието OnClick за изгледа на списъка се задейства, трябва да определите какво елементи от изгледа на списъка се намират под точката, посочена от параметрите X и Y - това е местоположението на мишката в момента на "Клик".

TListiew's GetHitTestInfoAt функция връща информация за определената точка в клиентската област на изгледа на списъка.

За да сте сигурни, че елементът е щракнат (или щракнат два пъти), трябва да се обадите на GetHitTestInfoAt и да реагирате само ако събитието с щракване се е случило върху действителен елемент.

Ето пример за изпълнение на събитието OnDblClick на ListView1:

// обработва ListView1's при двойно щракванепроцедура TForm.ListView1DblClick(Подател: TObject);
Var
hts: THitTests;
ht: THitTest;
пепелник: низ;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
започвам
// позицията на курсора на мишката, свързана с ListView
ListViewCursosPos: = ListView1.ScreenToClient (Мишка. CursorPos);
// щракнете два пъти къде?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// хит тест за „отстраняване на грешки“
Надпис: = '';
за HT в HTS правя
започвам
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Надпис: = Формат ('% s% s |', [Надпис, sht]);
край;
// намерете елемента с двойно щракване
ако hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] тогава
започвам
selectedItem: = ListView1.Selected;
// направете нещо с двойно кликвания елемент!
Надпис: = Формат ('DblClcked:% s', [selectedItem. Надпис]);
край;
край;

В манипулатора на събитията OnDblClick (или OnClick) прочетете функцията GetHitTestInfoAt, като му предоставите местоположението на мишката „вътре“ в контрола. За да получите местоположението на мишката, свързано с изгледа на списъка, функцията ScreenToClient се използва за преобразуване на точка (мишка X и Y) в координати на екрана в локални или клиентски области, координати.

GetHitTestInfoAt връща стойност от THitTests Тип. The ThitTests е набор от THitTest изброени стойности.

The ThitTest изброяване Стойностите с тяхното описание са:

  • htAbove - над клиентската зона.
  • htBelow - под клиентската зона.
  • htNowhere - вътре в контрола, но не върху елемент.
  • htOnItem - върху елемент, негов текст или растерна карта.
  • htOnButton - на бутон.
  • htOnIcon - върху икона.
  • htOnIndent - върху отредената площ на даден артикул.
  • htOnLabel - на етикет.
  • htOnRight - от дясната страна на артикул.
  • htOnStateIcon - върху икона на състояние или растерна карта, свързани с елемент.
  • htToLeft - вляво от клиентската зона.
  • htToRight - вдясно от клиентската зона.

Ако резултатът от повикването към GetHitTestInfoAt е a подмножество (комплекти Delphi!) на [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] можете да сте сигурни, че потребителят е кликнал върху елемента (или върху иконата / иконата на състоянието).

И накрая, ако горното е вярно, прочетете подбран свойство на изгледа на списъка, той връща първия избран елемент (ако може да бъде избран няколко) в изгледа на списъка. Направете нещо с щракналия / двойно кликвания / избран елемент ...

Не забравяйте да изтеглите пълния изходен код, за да проучите кода и да се научите, като го приемете.