![]() |
VirtualTreeView Textlänge begrenzen mit '...'
Hi Leute,
sollte eigentlich einfach sein aber irgentwie komme ich das Problem nicht ganz aus der Welt. Ich möchte innerhalb eines VirtualStringTree's die horizontale Scrollbar ausblenden und Text die "zu lang" sind mit '...' anzeigen. Das Scollbar ausblenden ist ja kein Problem, der Anzeige-Text wird dynamisch im OnGetText-Event gesetzt. Colmuns gibt es keine. Ich hatte jetzt schon versucht mit :
Delphi-Quellcode:
Die Textbreite zu ermitteln, aber mit was soll ich die Breite vergleichen ?
// Textbreite ermitteln
iTextWidth := vst_xyz.Canvas.TextWidth(pNodeData^.NodeCaption); // Text zu breit ? Mit was vergleichen ? - Width des VirtualTreeview berücksichtigt nicht die Nodeeinrückung -
Delphi-Quellcode:
liefert leider auch nicht das gewünschte Ergebnis
ARect := vst_xyz.Canvas.ClipRect;
iWidth := ARect.Right - ARect.Left; -
Delphi-Quellcode:
leider auch nicht
iWidth := vst_xyz.Width - (vst_xyz.Indent * vst_xyz.GetNodeLevel(Node));
Habe ich einen Denkfehler oder gibt es gar eine Property im VST dafür die ich übersehen habe ? Greetz Data |
Re: VirtualTreeView Textlänge begrenzen mit '...'
Im OnBeforeCellPaint() kannst du auf das ContentRect zugreifen und die Breite des sichtbaren Bereichs errechnen (Da musst du dann noch 2* den TextMargin zu addieren).
Speicher dir das Ergebnis zb in dem Column.Tag oder im dirket im Header.Tag, wenn du ohne Columns arbeitest, Eine 0 würde ich verwenden, wenn der Platz ausreicht für den Text und alles >0 mit der Funktion VirtualTrees.ShortenString(); kürzen. CoLT |
Re: VirtualTreeView Textlänge begrenzen mit '...'
Hi,
am einfachsten ist es wahrscheinlich, eine einzige Spalte ohne Anzeige des Headers einzurichten. In den Optionen für den Header stellst du hoAutoResize auf den Wert True, die Eigenschaft Header.AutoSizeIndex stellst du auf den Wert 0. Dadurch nimmt die Spalte die gesamte Breite des Trees ein, zu lange Texte werden dann vom VST automatisch durch "..." gekennzeichnet. Gruß Hawkeye |
Re: VirtualTreeView Textlänge begrenzen mit '...'
Ich werfe mal das Ereignis OnShortenString in den Raum ;-)
|
Re: VirtualTreeView Textlänge begrenzen mit '...'
@Hawkeye,Colt:
Thanks zum 2ten, in meinem Fall nehme ich jetzt die automatische Variante von Hawkeye ;-) @Mirage: Auch interessant zu wissen, aber kürzen muss ich den String dort selber. Greetz Data |
Re: VirtualTreeView Textlänge begrenzen mit '...'
Zitat:
Delphi-Quellcode:
Viele Grüße
if TargetCanvas.TextWidth(S) > TextSpace then
begin Result := MinimizeName(S, TargetCanvas, TextSpace); Done := True; end; |
Re: VirtualTreeView Textlänge begrenzen mit '...'
Oder Du nimmst
Delphi-Quellcode:
Dann wird alles berechnet
S := ShortenString(PaintInfo.Canvas.Handle, S, R.Right - R.Left, 0);
|
Re: VirtualTreeView Textlänge begrenzen mit '...'
Die Frage ist jetzt ausreichend mit mehreren Möglichkeiten beantwortet,
denke das ist jetzt für jeden die richtige Lösung dabei, nochmal Danke an alle, Greetz Data |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz