![]() |
TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Hallo,
ich arbeite schon lange mit der Komponente TVirtualStringTree aber das Verhalten habe ich bisher noch nicht erlebt. Aber was passiert, ich versuche mit 'AutoFitColumns' die Spalten an den Inhalt bzw. die Überschrift anzupassen aber in einer Situation wird partout die erste Spalte ignoriert und erst die darauf folgenden Spalten korrekt angepasst. Wie sonst auch führe ich nach dem Ändern eines Eintrags folgenden Befehl aus um alle Spalten anzupassen, aber die erste Spalte bleibt unverändert und wird nicht vergrößert.
Delphi-Quellcode:
Das kuriose ist das es beim ersten befüllen der Komponente klappt nur nicht wenn ich Einträge ändern will. Ich hoffe jemand von euch hat einen Tipp. Leider kann ich nicht ohne das halbe Projekt online zu stellen euch mehr Quellcode zeigen.
vstTable.Header.AutoFitColumns(False, smaUseColumnOption, 0, vstTable.Header.Columns.Count-1);
|
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Hallo Tux,
ich nutze die Funktion zwar nicht da ich immer selbst die Breite der Columns angebe, habe aber im SourceCode gesehen, dass vor dem Ausführen des Sizing das Event
Delphi-Quellcode:
ausgelöst wird (wenn denn ein EventHandler existiert).
OnBeforeAutoFitColumns
Hier gibt es einen Parameter
Delphi-Quellcode:
. Setzt du diesen an irgendeiner Stelle auf einen anderen Wert oder nutzt du das Event überhaupt?
var SmartAutoFitType: TSmartAutoFitType
Wenn nicht, dann steht (wie du es beim Aufruf auch übergibst) die Option auf
Delphi-Quellcode:
.
smaUseColumnOption
Und das ist der Knackpunkt. Hast du auch bei deiner ersten Column die Option in den ColumnOptions eingeschaltet? |
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
Delphi-Quellcode:
verwende ich nicht in dem Projekt, das komische ist es das ja eigentlich alles funktioniert und richtig ist nur beim Ändern eines Eintrags will er einfach nicht die erste Spalte anpassen. Füge ich einen weiteren Eintrag hinzu, wird die Spalte korrekt angepasst.
OnBeforeAutoFitColumns
Delphi-Quellcode:
Jetzt passiert folgendes, Spalte 2 hat die korrekte und angepasste Breite und Spalte 1 bleibt unverändert und somit zu klein. Dazu kommt noch das erst wenn ich auf eine andere Zeile wechsle werden in der 1. Spalte die drei Punkte gezeichnet.
var
Node: PVirtualNode; Data: PDataset; begin Node := vstTable.FocusedNode; if Assigned(Node) then begin Data := vstTable.GetNodeData(Node); if Assigned(Data) then begin Data.Name := edtName.Text; //1. Spalte, hier wird eine längere Bezeichnung eingegeben Data.Type := edtType.Text; //2. Spalte, hier wird ebenfalls etwas längeres Eingetragen end; end; //Spalten anpassen... vstTable.Header.AutoFitColumns(False, smaUseColumnOption, 0, vstTable.Header.Columns.Count-1); |
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
Delphi-Quellcode:
Diese muss jedoch nicht immer zwingend mit dem ColumnIndex übereinstimmen. Vielleicht liegt es ja daran.
AutoFitColumns(True, smaUseColumnOption, FColumns[FColumns.FTrackIndex].FPosition, FColumns[FColumns.FTrackIndex].FPosition)
Ansonsten kann es fast nur noch an den Optionen für die Spalte bzw. den Tree liegen madas |
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Hast du dir denn auch die ColumnOptions der ersten Column angeschaut? Ist dort die entsprechende Option aktiviert?
|
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
|
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
Delphi-Quellcode:
nix
DefaultColumnOptions = [coAllowClick, coDraggable, coEnabled, coParentColor, coParentBidiMode, coResizable, coShowDropmark, coVisible, coAllowFocus, coEditable];
Delphi-Quellcode:
zu sehen.
coSmartResize
|
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
Delphi-Quellcode:
Ändere ich den Inhalt z.B. in Spalte 2 wird die Spalte sofort angepasst, neu gezeichnet und alles ist wunderbar.
vstTable.invalidate
|
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Zitat:
Delphi-Quellcode:
not TreeView.OperationCanceled
procedure DoAutoFitColumn(Column: TColumnIndex);
begin with FColumns do if ([coResizable, coVisible] * Items[FPositionToIndex[Column]].FOptions = [coResizable, coVisible]) and DoBeforeAutoFitColumn(FPositionToIndex[Column], SmartAutoFitType) and not TreeView.OperationCanceled then begin if Animated then AnimatedResize(FPositionToIndex[Column], Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column]))) else FColumns[FPositionToIndex[Column]].Width := Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column])); DoAfterAutoFitColumn(FPositionToIndex[Column]); end; end; Binde doch die Unit einfach mal in Dein Projekt ein und debugge das Ganze. Viel Erfolg. madas |
AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst
Es wird immer lustiger, ich gucke gerade was den
Delphi-Quellcode:
so tatsächlich macht.
AutoFitColumns
Delphi-Quellcode:
Irgendwie scheint
ShowMessage(vstTable.GetMaxColumnWidth(0, True).ToString); //Hier ist die Spalte 69px breit
ShowMessage(vstTable.GetMaxColumnWidth(1, True).ToString); //Hier ist die Spalte 49px breit Node := vstTable.FocusedNode; if Assigned(Node) then begin Data := vstTable.GetNodeData(Node); if Assigned(Data) then begin Data.Name := 'skljglsjfgskjfsldjfksjlfkjsd'; //neuer Text ist länger als alle anderen Data.Type := 'dfkgjdkjgfklgjdkjgkljgkdjkkgdljgkdjgdgfdgld'; //neuer Text ist länger als alle anderen end; end; ShowMessage(vstTable.GetMaxColumnWidth(0, True).ToString); //Hier ist die Spalte 69px breit -> FALSCH ShowMessage(vstTable.GetMaxColumnWidth(1, True).ToString); //Hier ist die Spalte 129px breit -> RICHTIG
Delphi-Quellcode:
beim Ändern des Inhaltes von Spalte 1 zu versagen ..
GetMaxColumnWidth
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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 by Thomas Breitkreuz