Сегодня я хочу рассказать, как можно заменить некоторые элементы в стандартный TListView.

Например, у вас есть 5 пунктов и хотите поменять местами первый и третий элементы

 

Проблема, что стандартный компонент TListView не такой способ и вы должны понимать это сами.

 

Мы помним, что стандартный путь от старого Паскаля раза (для чисел):

 

Code:

procedure Swap(X, Y: Integer);

var

  s: Integer;

begin

  s := X;

  X := Y;

  Y := X

end;

 

 

Something similar we can do with TListItem too.

But just to save all strings (caption+sub items) somewhere is not enough because TListItem class have a lot of other information (image indexes, pointer as Data, etc)

 

So correct way is to use Assign method:

Code:

procedure ExchangeItems(lv: TListView; const i, j: Integer);

var

  tempLI: TListItem;

begin

  lv.Items.BeginUpdate;

  try

    tempLI := TListItem.Create(lv.Items);

    tempLI.Assign(lv.Items.Item[i]);

    lv.Items.Item[i].Assign(lv.Items.Item[j]);

    lv.Items.Item[j].Assign(tempLI);

    tempLI.Free;

  finally

    lv.Items.EndUpdate

  end;

end;

  

Поэтому структура такая же, как в нашем примере для целых. Все, что мы добавили несколько BeginUpdate и EndUpdate (просто позволяют уменьшить мерцание)

 

Так что если вы хотите обменять элементов в listview, и просто вызвать эту процедуру...

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить