AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VirtualTreeView Textlänge begrenzen mit '...'
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView Textlänge begrenzen mit '...'

Ein Thema von DataCool · begonnen am 6. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 14:24
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:
  // Textbreite ermitteln
  iTextWidth := vst_xyz.Canvas.TextWidth(pNodeData^.NodeCaption);
  // Text zu breit ? Mit was vergleichen ?
Die Textbreite zu ermitteln, aber mit was soll ich die Breite vergleichen ?

- Width des VirtualTreeview berücksichtigt nicht die Nodeeinrückung

-
Delphi-Quellcode:
   ARect := vst_xyz.Canvas.ClipRect;
   iWidth := ARect.Right - ARect.Left;
liefert leider auch nicht das gewünschte Ergebnis

-
iWidth := vst_xyz.Width - (vst_xyz.Indent * vst_xyz.GetNodeLevel(Node)); leider auch nicht

Habe ich einen Denkfehler oder gibt es gar eine Property im VST dafür die ich übersehen habe ?

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
CoLT

Registriert seit: 10. Nov 2005
Ort: Remscheid
9 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 15:15
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 17:57
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
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 18:18
Ich werfe mal das Ereignis OnShortenString in den Raum
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 22:16
@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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 6. Jul 2009, 23:39
Zitat von DataCool:
@Mirage:
Auch interessant zu wissen, aber kürzen muss ich den String dort selber.
Das stimmt, wobei Du z.B. für Dateinamen "MinimizeName" aus der FileCtrl Unit nehmen kannst:
Delphi-Quellcode:
  if TargetCanvas.TextWidth(S) > TextSpace then
  begin
    Result := MinimizeName(S, TargetCanvas, TextSpace);
    Done := True;
  end;
Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 7. Jul 2009, 07:19
Oder Du nimmst

S := ShortenString(PaintInfo.Canvas.Handle, S, R.Right - R.Left, 0); Dann wird alles berechnet
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: VirtualTreeView Textlänge begrenzen mit '...'

  Alt 7. Jul 2009, 07:46
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz