Delphi/Lazarus: Text langer Items als Hint in ListBox anzeigen
Tutorial von Stefan Trost | Letztes Update am 07.01.2023 | Erstellt am 25.10.2013
In diesem Tutorial möchte ich euch zeigen, wie ihr in Delphi oder Lazarus hinbekommt, dass der Text langer Einträge einer TListBox als Hint (eine kleine Box bei einem MouseOver) angezeigt wird, wenn man mit der Maus über das jeweilige Item fährt.
Diese Funktion beherrscht die ListBox im Gegensatz zur TListView nämlich nicht von alleine und da die ListBox von sich aus auch keine Zeilenumbrüche unterstützt, bietet es sich an, dieses Feature programmatisch zu implementieren.
Hint immer anzeigen
Schauen wir uns zunächst diesen Code an, den wir dem Ereignis OnMouseMove unserer Listbox hinzugefügt haben. In diesem Beispiel zeigen wir das Hint immer an, unabhängig davon, wie lang der Text eines Items auch sein mag.
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var k: integer; begin k := ListBox1.ItemAtPos(Point(X,Y),true) if k = -1 then begin ListBox1.ShowHint := false; end else begin ListBox1.ShowHint := true; ListBox1.Hint := ListBox1.Items[k]; end; end;
Wenn wir mit der Maus über unsere ListBox fahren, wird automatisch das OnMouseMove-Ereignis ausgeführt und die Koordinaten der Maus in den Variablen X und Y übergeben. Mit der Funktion ItemAtPos() können wir den Eintrag einer ListBox bestimmen, der an einer bestimmten Stelle liegt. Die Funktion liefert uns den Index des betreffenden Items zurück oder -1 falls sich an dieser Stelle kein Eintrag befindet.
Abhängig vom Rückgabewert müssen wir nun also nur noch das ShowHint der ListBox aktivieren oder deaktivieren und im ersteren Fall das Hint auf den Text des entsprechenden Items setzen.
Text nur bei langen Items anzeigen
Möchten wir den Text nur bei Items einer bestimmten Länge anzeigen (zum Beispiel bei denen, die über die Größe der ListBox hinausragen, können wir eine weitere Bedingung in unseren Code von eben einfügen:
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var k: integer; s: string; begin k := ListBox1.ItemAtPos(Point(X,Y),true) if k = -1 then begin ListBox1.ShowHint:=false; end else begin s := ListBox1.Items[k]; if ListBox1.Canvas.TextWidth(s)>ListBox1.Width-10 then begin ListBox1.ShowHint := true; ListBox1.Hint := ListBox1.Items[k]; end else begin ListBox1.ShowHint := false; end; end; end;
Falls wir also einen Eintrag unter unserem Cursor vorfinden, prüfen wir zunächst mit der Hilfe von Canvas.TextWidth(), ob die Länge des Textes dieses Items über die Breite der ListBox hinausragt. Nur in diesem Fall aktivieren wir unser Hint, ansonsten setzen wir ShowHint wieder auf false, wodurch der Hint nicht angezeigt wird.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
Delphi/Lazarus: Markierte Items aus ListBox mit ENTF-Taste löschen
Tipp | 0 Kommentare
Delphi/Lazarus: Mit STRG+A in ListView alles markieren
Tipp | 0 Kommentare
Delphi/Lazarus: Mit ENTF-Taste markierte Einträge aus ListView löschen
Tipp | 0 Kommentare
Delphi/Lazarus: Item bzw. Zeile zu ListView hinzufügen
Info | 0 Kommentare
Mouseover Buttons mit CSS ohne Nachladen
Tutorial | 0 Kommentare
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
Windows Batch Script: Computer herunterfahren
Tutorial | 2 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.