Делфи Элемент управления TListView отображает список элементов в столбцах с заголовками и вложенными элементами столбцов или по вертикали или горизонтали с небольшими или большими значками.
Как и большинство элементов управления Delphi, TListView предоставляет По щелчку и OnDblClick (OnDoubleClick) события.
К сожалению, если вам нужно знать, по какому элементу щелкнули или дважды щелкнули, вы не можете просто обработать события OnClick / OnDblClick, чтобы получить выбранный элемент.
Событие OnClick (OnDblClick) для TListView вызывается всякий раз, когда пользователь щелкает элемент управления, то есть всякий раз, когда происходит щелчок где-то внутри клиентской области управления.
Пользователь может щелкнуть внутри представления списка, НО «пропустить» любой из пунктов. Более того, так как представление списка может изменить свое отображение в зависимости от свойства ViewStyle, пользователь возможно, щелкнул элемент, заголовок элемента, значок элемента «нигде», значок состояния элемента, и т.п.
Примечание. Свойство ViewStyle определяет способ отображения элементов в представлении списка: элементы могут отображаться в виде набора подвижных значков или столбцов текста.
Посмотреть список. На элементе нажмите и ListView. Двойной клик по предмету
Чтобы иметь возможность найти элемент, по которому щелкнули (если он есть), при возникновении события OnClick для представления списка, необходимо определить, что элементы представления списка лежат под точкой, заданной параметрами X и Y - это местоположение мыши в момент «Нажмите кнопку».
TListiew's GetHitTestInfoAt Функция возвращает информацию об указанной точке в клиентской области представления списка.
Чтобы убедиться, что по элементу щелкнули (или дважды щелкнули), вам нужно вызвать GetHitTestInfoAt и реагировать только в том случае, если событие нажатия произошло с реальным элементом.
Вот пример реализации события OnDblClick в ListView1:
// обрабатывает ListView1 при двойном щелчкепроцедура ТГогт.ListView1DblClick(Отправитель: TObject);
вар
hts: THitTests;
ht: THitTest;
SHT: строка;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
начать
// положение курсора мыши, связанного с ListView
ListViewCursosPos: = ListView1.ScreenToClient (Мышь. CursorPos);
// двойной щелчок где?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// тест отладки
Надпись: = '';
за ХТ в HTS делать
начать
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Заголовок: = Формат ('% s% s |', [Заголовок, шт]];
конец;
// найти элемент двойного щелчка
если hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] тогда
начать
selectedItem: = ListView1.Selected;
// сделать что-то с двойным щелчком мыши!
Заголовок: = Формат ('DblClcked:% s', [selectedItem. Подпись]);
конец;
конец;
В обработчике события OnDblClick (или OnClick) прочитайте функцию GetHitTestInfoAt, указав расположение мыши «внутри» элемента управления. Чтобы получить местоположение мыши, относящееся к представлению списка, функция ScreenToClient используется для преобразования точки (мыши X и Y) в координатах экрана в локальные или клиентские области координат.
GetHitTestInfoAt возвращает значение THitTests тип. THitTests представляет собой набор THitTest перечисляемые значения.
TheTitTest перечисление Значения с их описанием:
- htAbove - над клиентской зоной.
- htBelow - под клиентской зоной.
- HTNOWHERE - внутри элемента управления, но не на элементе.
- htOnItem - на элементе, его тексте или его растровом изображении.
- htOnButton - на кнопке.
- htOnIcon - на иконке.
- htOnIndent - на области с отступом элемента.
- htOnLabel - на этикетке.
- htOnRight - на правой стороне предмета.
- htOnStateIcon - на значке состояния или растровом изображении, связанном с элементом.
- htToLeft - слева от клиентской зоны.
- htToRight - справа от клиентской зоны.
Если результатом вызова GetHitTestInfoAt является подмножество (наборы Delphi!) [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] вы можете быть уверены, что пользователь нажал на элемент (или на его значок / значок состояния).
Наконец, если вышеприведенное верно, прочитайте выбранный свойство представления списка, возвращает первый выбранный элемент (если можно выбрать несколько) в представлении списка. Сделайте что-нибудь с щелчком / двойным щелчком / выбранным элементом ...
Обязательно загрузите полный исходный код, чтобы изучить код и изучить его.