Ok, ich verstehe es zwar nicht so ganz aber ich glaube ich habe die Ursache gefunden. Weil die Zeile ja immer noch den Focus hat und ausgewählt ist wird wohl intern der Inhalt für die erste Spalte geändert so das bei der Berechnung der maximalen Breite keine Veränderung erkannt wird. Hebe ich die Auswahl vor dem Ändern auf klappt es und auch die erste Spalte wird korrekt geändert.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
Node: PVirtualNode;
Data: PMyDataSet;
begin
ShowMessage(IntToStr(vstTable.GetMaxColumnWidth(0, False))); //62px
ShowMessage(IntToStr(vstTable.GetMaxColumnWidth(1, False))); //77px
vstTable.BeginUpdate;
Node := vstTable.FocusedNode;
vstTable.ClearSelection; //Auswahl aufheben
if Assigned(Node) then
begin
Data := vstTable.GetNodeData(Node);
if Assigned(Data) then
begin
Data.Name := Data.Name + 'xyz 12345';
Data.Desc := Data.Desc + 'xyz 12345';
end;
end;
vstTable.EndUpdate;
vstTable.FocusedNode := Node; //Zeile wieder auswählen
vstTable.Selected[Node] := True; //und markieren
ShowMessage(IntToStr(vstTable.GetMaxColumnWidth(0, False))); //106px
ShowMessage(IntToStr(vstTable.GetMaxColumnWidth(1, False))); //127px
vstTable.Header.AutoFitColumns(False, smaAllColumns);
end;