@Aviator: Danke, mit den AutoFitColumns sieht das ganze schon viel besser aus.
Kannst du mal deine Lösung veröffentlichen?
Beachte die letzte Zeile im FormCreate!
Das Verhalten von AutoFitColumns() lässt sich durch die einzelnen Column Options noch entsprechend anpassen.
Hier mal ein Auszug aus dem VST SourceCode:
Delphi-Quellcode:
procedure TVTHeader.AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption;
RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn);
//--------------- local functions -------------------------------------------
function GetUseSmartColumnWidth(ColumnIndex: TColumnIndex): Boolean;
begin
Result := False;
case SmartAutoFitType of
smaAllColumns:
Result := True;
smaNoColumn:
Result := False;
smaUseColumnOption:
Result := coSmartResize in FColumns.Items[ColumnIndex].FOptions;
end;
end;
//----------------------------------------------------------------------------
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;
//--------------- end local functions ----------------------------------------
var
I: Integer;
StartCol,
EndCol: Integer;
begin
...
end;
Je nachdem welcher SmartAutoFitType übergeben wird, werden entweder die globalen Standardeinstellungen oder aber Columnspezifische Einstellungen verwendet.