Delphi's Kontrolka TListView wyświetla listę elementów w kolumnach z nagłówkami kolumn i podelementami, lub pionowo lub poziomo, z małymi lub dużymi ikonami.
Podobnie jak większość kontrolek Delphi, TListView udostępnia Na kliknięcie i OnDblClick (OnDoubleClick) zdarzenia.
Niestety, jeśli chcesz wiedzieć, który element został kliknięty lub kliknięty dwukrotnie, nie możesz po prostu obsłużyć zdarzeń OnClick / OnDblClick, aby uzyskać kliknięty element.
Zdarzenie OnClick (OnDblClick) dla TListView jest uruchamiane za każdym razem, gdy użytkownik kliknie element sterujący - czyli za każdym razem, gdy nastąpi „kliknięcie” gdzieś w obszarze klienta kontroli.
Użytkownik może kliknąć w widoku listy, ALE „przegapić” dowolny element. Co więcej, ponieważ widok listy może zmienić sposób wyświetlania w zależności od właściwości ViewStyle, użytkownika mógł kliknąć element, podpis, ikonę elementu „nigdzie”, ikonę stanu elementu, itp.
Uwaga: właściwość ViewStyle określa sposób wyświetlania elementów w widoku listy: elementy mogą być wyświetlane jako zestaw ruchomych ikon lub jako kolumny tekstu.
ListView. Kliknij pozycję i widok listy. Kliknij pozycję na przedmiocie
Aby móc zlokalizować kliknięty element (jeśli taki istnieje) po uruchomieniu zdarzenia OnClick dla widoku listy, musisz ustalić, co elementy widoku listy znajdują się pod punktem określonym przez parametry X i Y - to jest położenie myszy w chwili "Kliknij".
TListiew's GetHitTestInfoAt funkcja zwraca informacje o określonym punkcie w obszarze klienta widoku listy.
Aby upewnić się, że element został kliknięty (lub kliknięty dwukrotnie), musisz wywołać GetHitTestInfoAt i zareagować tylko wtedy, gdy zdarzenie kliknięcia wystąpiło na rzeczywistym elemencie.
Oto przykładowa implementacja zdarzenia OnDblClick ListView1:
// obsługuje ListView1 po podwójnym kliknięciuprocedura TForm.ListView1DblClick(Sender: TObject);
var
hts: THitTests;
ht: THitTest;
Sht: strunowy;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
zaczynać
// pozycja kursora myszy związana z ListView
ListViewCursosPos: = ListView1.ScreenToClient (mysz. CursorPos);
// kliknij dwukrotnie gdzie?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// test trafień „debugowania”
Podpis: = '';
dla ht w hts robić
zaczynać
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Caption: = Format ('% s% s |', [Caption, sht]);
koniec;
// zlokalizuj dwukrotnie kliknięty element
gdyby hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] następnie
zaczynać
selectedItem: = ListView1.Selected;
// zrób coś z podwójnie klikniętym przedmiotem!
Podpis: = Format ('DblClcked:% s', [selectedItem. Podpis]) ;
koniec;
koniec;
W module obsługi zdarzeń OnDblClick (lub OnClick) przeczytaj funkcję GetHitTestInfoAt, podając jej położenie myszy „wewnątrz” kontrolki. Aby uzyskać położenie myszy związane z widokiem listy, funkcja ScreenToClient służy do konwersji punktu (myszy X i Y) we współrzędnych ekranu na współrzędne lokalne lub obszaru roboczego.
GetHitTestInfoAt zwraca wartość THitTests rodzaj. THitTests to zestaw THitTest wyliczone wartości.
THitTest wyliczenie wartości wraz z opisem to:
- htAbove - powyżej strefy klienta.
- htBelow - poniżej strefy klienta.
- htNowhere - wewnątrz kontrolki, ale nie na przedmiocie.
- htOnItem - na elemencie, jego tekście lub mapie bitowej.
- htOnButton - na przycisku.
- htOnIcon - na ikonie.
- htOnIndent - na wciętym obszarze elementu.
- htOnLabel - na etykiecie.
- htOnRight - po prawej stronie przedmiotu.
- htOnStateIcon - na ikonie stanu lub mapie bitowej powiązanej z elementem.
- htToLeft - po lewej stronie obszaru klienta.
- htToRight - na prawo od strefy klienta.
Jeśli wynikiem wywołania GetHitTestInfoAt jest a podzbiór (zestawy Delphi!) z [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] możesz być pewien, że użytkownik kliknął element (lub jego ikonę / ikonę stanu).
Wreszcie, jeśli powyższe jest prawdziwe, przeczytaj Wybrany właściwość widoku listy, zwraca pierwszy wybrany element (jeśli można wybrać wiele) w widoku listy. Zrób coś z klikniętym / podwójnie klikniętym / wybranym elementem ...
Pobierz pełny kod źródłowy, aby poznać kod i nauczyć się go, przyjmując go.