Implementieren auf Element Klicken / Doppelklicken für TListView

Delphi Das TListView-Steuerelement zeigt eine Liste von Elementen in Spalten mit Spaltenüberschriften und Unterelementen oder vertikal oder horizontal mit kleinen oder großen Symbolen an.

Wie die meisten Delphi-Steuerelemente macht das TListView das verfügbar OnClick und OnDblClick (OnDoubleClick) Ereignisse.

Wenn Sie wissen möchten, auf welches Element geklickt oder doppelt geklickt wurde, können Sie die OnClick / OnDblClick-Ereignisse leider nicht einfach verarbeiten, um das angeklickte Element abzurufen.

Das OnClick (OnDblClick) -Ereignis für TListView wird ausgelöst, wenn der Benutzer auf das Steuerelement klickt - dh wenn der "Klick" auftritt irgendwo im Client-Bereich des Steuerelements.

Der Benutzer kann in die Listenansicht klicken, ABER eines der Elemente "verpassen". Da die Listenansicht ihre Anzeige abhängig von der ViewStyle-Eigenschaft, dem Benutzer, ändern kann Möglicherweise haben Sie auf einen Artikel, eine Artikelbeschriftung, ein Artikelsymbol, "Nirgendwo", ein Artikelstatus-Symbol geklickt. etc.

instagram viewer

Hinweis: Die ViewStyle-Eigenschaft bestimmt, wie Elemente in der Listenansicht angezeigt werden: Die Elemente können als Satz beweglicher Symbole oder als Textspalten angezeigt werden.

Listenansicht. Auf Element Klicken Sie auf & ListView. Doppelklicken Sie auf das Element

Um das angeklickte Element (falls vorhanden) zu finden, wenn das OnClick-Ereignis für die Listenansicht ausgelöst wird, müssen Sie festlegen, was Elemente der Listenansicht liegen unter dem durch die X- und Y-Parameter angegebenen Punkt - das ist die Position der Maus zum Zeitpunkt von "klicken".

Die TListiew's GetHitTestInfoAt Die Funktion gibt Informationen zum angegebenen Punkt im Clientbereich der Listenansicht zurück.

Um sicherzustellen, dass auf das Element geklickt (oder doppelt geklickt) wurde, müssen Sie GetHitTestInfoAt aufrufen und nur reagieren, wenn das Klickereignis bei einem tatsächlichen Element aufgetreten ist.

Hier ist eine Beispielimplementierung des OnDblClick-Ereignisses von ListView1:

// behandelt ListView1s On Double ClickVerfahren TForm.ListView1DblClick(Absender: TObject);
var
hts: THitTests;
ht: THitTest;
sht: Zeichenfolge;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
Start
// Position des Mauszeigers in Bezug auf ListView
ListViewCursosPos: = ListView1.ScreenToClient (Maus. CursorPos);
// Doppelklick wo?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// Hit-Test "debuggen"
Beschriftung: = '';
zum ht im hts tun
Start
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Beschriftung: = Format ('% s% s |', [Beschriftung, sht]);
Ende;
// Suchen Sie das doppelt angeklickte Element
wenn hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] dann
Start
selectedItem: = ListView1.Selected;
// mach etwas mit dem doppelklickenden Item!
Beschriftung: = Format ('DblClcked:% s', [selectedItem. Bildbeschriftung]) ;
Ende;
Ende;

Lesen Sie im OnDblClick- (oder OnClick-) Ereignishandler die GetHitTestInfoAt-Funktion, indem Sie die Position der Maus "innerhalb" des Steuerelements angeben. Um die Position der Maus in Bezug auf die Listenansicht zu ermitteln, wird mit der ScreenToClient-Funktion ein Punkt (Maus X und Y) in Bildschirmkoordinaten in lokale Koordinaten oder Koordinaten im Clientbereich konvertiert.

GetHitTestInfoAt gibt den Wert von zurück THitTests Art. Die THitTests sind eine Reihe von THitTest aufgezählte Werte.

Der THitTest Aufzählung Werte mit ihrer Beschreibung sind:

  • htAben - über dem Kundenbereich.
  • htBelow - unterhalb des Kundenbereichs.
  • Nirgendwo - innerhalb der Kontrolle, aber nicht auf einem Gegenstand.
  • htOnItem - auf einem Element, seinem Text oder seiner Bitmap.
  • htOnButton - Auf Knopfdruck.
  • htOnIcon - Auf einem Symbol.
  • htOnIndent - auf dem eingerückten Bereich eines Elements.
  • htOnLabel - Auf einem Etikett.
  • htOnRight - auf der rechten Seite eines Artikels.
  • htOnStateIcon - auf einem Statussymbol oder einer Bitmap, die einem Element zugeordnet sind.
  • htToLeft - links vom Kundenbereich.
  • htToRight - rechts vom Kundenbereich.

Wenn das Ergebnis des Aufrufs von GetHitTestInfoAt a ist Teilmenge (Delphi-Mengen!) Bei [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] können Sie sicher sein, dass der Benutzer auf das Element (oder auf dessen Symbol / Statussymbol) geklickt hat.

Wenn das oben Gesagte zutrifft, lesen Sie schließlich die Ausgewählt Eigenschaft der Listenansicht, gibt es das erste ausgewählte Element (wenn mehrere ausgewählt werden können) in der Listenansicht zurück. Machen Sie etwas mit dem angeklickten / doppelt geklickten / ausgewählten Element ...

Stellen Sie sicher, dass Sie den vollständigen Quellcode herunterladen, um den Code zu erkunden und zu lernen, indem Sie ihn übernehmen.