Hallo!
Nach langer Zeit hab ich mal wieder ein Problem an dem ich mir die Zähne ausbeiße:
Ich verwende einen VirtualTreeview als Grid. Dort wo ich das Grid initialisiere, stehen mir schon folgende Werte zur Verfügung:
- Spaltentitel (Headertext) jeder Spalte
- längster Grid-Celltext jeder Spalte
Ich versuche nun, bei der Initialisierung für jede Spalte die optimale Breite zu berechnen. Das Ziel soll sein, dass jede Spalte genau so breit ist, dass weder der Headertext noch die Zellenwerte mit "..." abgekürzt werden. Die Spalten sind zudem sortierbar, d.h. es kommt ggf. im Header noch das SortGlyph dazu.
Ich kann nun zwar mit Canvas.TextWidth die Breite des Headertextes sowie des längsten Zellentextes berechnen. Aber ich habe festgestellt, dass mit statischen "Zugaben" für Headerbreite und Zellenbreite kein Blumentopf zu gewinnen ist. Ich kriegs zwar hin dass alle Spalten ohne "..." angezeigt werden, aber manche sind viel zu breit.
Wenn ich mir z.B. in VirtualTrees.pas die TVirtualTreeColumn.ComputeHeaderLayout anschaue, dann ahne ich auch warum: Da stecken extrem komplizierte Berechnungen dahinter.
Nun frage ich mich: Hat der Virtualtree vielleicht schon eine eingebaute Funktion, die optimale Spaltenbreite zu berechnen, der ich den Headertext und den längsten Zellentext mitgeben kann?
Grüße
Cody