TListView: VCL pierde el orden de las columnas si agrega una columna

Estoy intentando agregar una columna entre columnas existentes en un TListView. Por lo tanto, agrego la nueva columna al final y la muevo estableciendo su índice en el valor designado. Esto funciona, hasta agregar otra nueva columna.

Lo que hice: agregue la columna en la última posición (Columnas.Agregar) y agregue el subelemento en la última posición (Subitems.Add) también. Luego muevo la columna estableciendo su índice en la posición correcta. Esto funciona bien siempre que solo se agregue una columna. Al agregar una segunda columna nueva, los subpuntos se arruinan. El nuevo subpunto de la primera columna se mueve a la última posición, p. Me gusta esto

0        |  1          |  new A       |  new B      | 3
Caption  |  old sub 1  |  old sub 3   |  new Sub B  | new sub A

Sería muy feliz si alguien pudiera ayudar!

Por ejemplo, ¿hay algún comando o mensaje que pueda enviar a ListView para que actualice o guarde su Columna -> Asignación de subpunto que podría usar después de agregar la primera columna nueva y sus subpuntos para que pueda manejar la segunda columna nueva? de la misma manera que la primera.

¿O es solo un error de la columna TListViews -> manejo de subelementos o TListColumns ...?

código de ejemplo para una aplicación de formularios vcl (asigne el evento Form1.OnCreate):

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    listview: TListView;
    initButton: TButton;
    addColumn: TButton;
    editColumn: TEdit;
    subItemCount: Integer;
    procedure OnInitClick(Sender: TObject);
    procedure OnAddClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  listview := TListView.Create(self);
  with listview do
  begin
    Left := 8;
    Top := 8;
    Width := self.Width - 30;
    Height := self.Height - 100;
    Anchors := [akLeft, akTop, akRight, akBottom];
    TabOrder := 0;
    ViewStyle := vsReport;
    Parent := self;
  end;

initButton := TButton.Create(self);
with initButton do
  begin
    left := 8;
    top := listview.Top + listview.Height + 20;
    Width := 75;
    Height := 25;
    TabOrder := 1;
    Caption := 'init';
    OnClick := OnInitClick;
    Parent := self;
  end;

  editColumn := TEdit.Create(self);
  with editColumn do
  begin
    left := initButton.Left + initButton.Width + 30;
    top := listview.Top + listview.Height + 20;
    Width := 120;
    Height := 25;
    TabOrder := 2;
    Parent := self;
    Caption := '';
  end;

  addColumn := TButton.Create(self);
  with addColumn do
  begin
    left := editColumn.Left + editColumn.Width + 10;
    top := listview.Top + listview.Height + 20;
    Width := 75;
    Height := 25;
    TabOrder := 1;
    Enabled := true;
    Caption := 'add';
    OnClick := OnAddClick;
    Parent := self;
  end;

end;

procedure TForm1.OnInitClick(Sender: TObject);
var col: TListColumn;
i, j: integer;
item: TListItem;
begin
  listview.Items.Clear;
  listview.Columns.Clear;

  // add items
  for I := 0 to 2 do
  begin
    col := ListView.Columns.Add;
    col.Caption := 'column ' + IntToStr(i);
    col.Width := 80;
  end;

  // add columns
  for I := 0 to 3 do
  begin
    item := ListView.Items.Add;
    item.Caption := 'ItemCaption';

    // add subitems for each column
    for j := 0 to 1 do
    begin
 ,     item.SubItems.Add('subitem ' + IntToStr(j+1));
    end;
  end;

  subItemCount := 5;
end;

procedure TForm1.OnAddClick(Sender: TObject);
var number: integer;
col: TListColumn;
i: Integer;
ascii: char;
begin
  listview.Columns.BeginUpdate;

  number := StrToInt(editColumn.Text);
  ascii :=  Chr(65 + number);

  // create the new column
  col := TListColumn(ListView.Columns.add());
  col.Width := 80;
  col.Caption := ascii;

  // add the new subitems
  for I := 0 to ListView.Items.Count-1 do
  begin
    ListView.Items[i].SubItems.Add('subitem ' + ascii);
  end;

  // move it to the designated position
  col.Index := number;

  listview.Columns.EndUpdate;

  Inc(subItemCount);
end;

end.

¡Gracias

Edita: La solución sugerida de Sertac Akyuz funciona bien, aunque no puedo usarla porque cambiar el código fuente de Delphi no es una solución para mi proyecto. Se informa un error.

Edita: Se eliminó la segunda pregunta que no fue intencionada incluida en la primera publicación y se abrió una nueva pregunta (Ver pregunta vinculada y Revisión de pregunta).

Actualiza: Los error reportado ahora está cerrado como arreglado a partir de Delphi XE2Update 4.

Respuestas a la pregunta(1)

Su respuesta a la pregunta