Einzelnen Beitrag anzeigen

madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#4

AW: TVirtualStringTree AutoFitColumns erste Spalte wird nicht angepasst

  Alt 4. Apr 2017, 09:54
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 OnBeforeAutoFitColumns ausgelöst wird (wenn denn ein EventHandler existiert).

Hier gibt es einen Parameter var SmartAutoFitType: TSmartAutoFitType . Setzt du diesen an irgendeiner Stelle auf einen anderen Wert oder nutzt du das Event überhaupt?

Wenn nicht, dann steht (wie du es beim Aufruf auch übergibst) die Option auf smaUseColumnOption .

Und das ist der Knackpunkt. Hast du auch bei deiner ersten Column die Option in den ColumnOptions eingeschaltet?
OnBeforeAutoFitColumns 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.

Delphi-Quellcode:
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);
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.
Hm, also intern wird für den Aufruf von AutoFitColumns die Position der Spalte benutzt:

AutoFitColumns(True, smaUseColumnOption, FColumns[FColumns.FTrackIndex].FPosition, FColumns[FColumns.FTrackIndex].FPosition) Diese muss jedoch nicht immer zwingend mit dem ColumnIndex übereinstimmen. Vielleicht liegt es ja daran.
Ansonsten kann es fast nur noch an den Optionen für die Spalte bzw. den Tree liegen

madas

Geändert von madas ( 4. Apr 2017 um 10:01 Uhr)
  Mit Zitat antworten Zitat