Визуальная древовидная структура VirtualStringTree всегда привязана к 1-му столбцу (тот, у которого index = 0). Когда вы меняете последовательность столбцов, перетаскивая заголовок столбца, дерево может выглядеть странно (изображение ниже). Возможно ли, чтобы структура всегда отображалась в первом видимом столбце?






Структура отображается на основе TVirtualStringTree.Header.MainColumn, который необходимо менять каждый раз при перемещении столбца, потому что перемещение столбца изменяет не его индекс, а свойство TVirtualTreeColumn.Position. Самый простой способ — использовать OnHeaderDragged.
procedure HeaderDragged(Sender: TVTHeader; Column: TColumnIndex; OldPosition: Integer);
begin
MyTree.Header.MainColumn := MyTree.Header.Columns.ColumnFromPosition(0);
end;