![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как поменять местами строки ListView?
Zahadum © (2007-05-12 15:59:00)Подскажите, пожалуйста-
как поменять местами строки ListView?
Т.е.:
2-я строка (выделена)--> жмём "\/"--> 2-я становится 3-ей (3-я, соответственно, второй)
И то-же самое вверх ( "/\" )
{RASkov} (2007-05-12 17:23:00) [1]> Li.Caption := Li1.Caption;
> for i := 0 to Li1.SubItems.Count - 1 do
> begin
> Li.SubItems.Add(Li1.SubItems[i]);
> end;
Можно и Assign использовать:
procedure MoveLVItem(LV: TListView; const FDown: Boolean);
var TmpL: TListItem; N, K: Integer;
begin
LV.Items.BeginUpdate;
try
N:=LV.ItemFocused.Index;
if ((N=0) and not FDown) or ((N=LV.Items.Count-1) and FDown) then Exit;
if FDown then K:=N+1 else K:=N-1;
TmpL:=TListItem.Create(LV.Items);
try
TmpL.Assign(LV.Items[N]);
LV.Items[N].Assign(LV.Items[K]);
LV.Items[K].Assign(TmpL);
LV.ItemFocused:=LV.Items[K];
finally TMpL.Free; end;
finally LV.Items.EndUpdate; end;
end;
Вызовы:
MoveLVItem(ListView, False); - Вверх
MoveLVItem(ListView, True); - Вниз
Zahadum (2007-05-12 16:32:00) [2]Благодарю!
DVM (2007-05-12 16:26:00) [3]Типа того:
procedure ChangeListItems(Li1, Li2: TListItem);
var
Li: TListItem;
i: integer;
begin
Li := TListItem.Create(nil);
try
Li.Caption := Li1.Caption;
for i := 0 to Li1.SubItems.Count - 1 do
begin
Li.SubItems.Add(Li1.SubItems[i]);
end;
// ....ну и в том же дух....
finally
Li.Free;
end;
end;
DVM (2007-05-12 16:19:00) [4]
> Это ж какую процедуру писать надо:
> 1. создать массив,
> 2. заполнить его значениями из выбранной строки
> 3. присвоить значения третьей строки - второй (2-я строка
> = 3-ей)
> 4. заполняем 3-ю строку из массива
>
> Может, что по-проще есть?
Ну ты и фантазер, ей богу! Массив!
А создать динамически TListItem и скопировать в него все данные, пробежвашись по всем Subitems нельзя что ли? Потом еще раз обратная операция.
Zahadum (2007-05-12 16:13:00) [5]Как бы ты поменял местами значения двух переменных? Чем ListView хуже?
Тем, что у ListView может быть 2, 3, 4 ... 50 колонок!
Это ж какую процедуру писать надо:
1. создать массив,
2. заполнить его значениями из выбранной строки
3. присвоить значения третьей строки - второй (2-я строка = 3-ей)
4. заполняем 3-ю строку из массива
Может, что по-проще есть?
DVM (2007-05-12 16:03:00) [6]
> как поменять местами строки ListView?
Как бы ты поменял местами значения двух переменных? Чем ListView хуже?
Есть еще один способ правда. Написать свою функцию сортировки и вызывать ее в нужный момент. Сортировать она будет по какому-то значению (например порядковый номер элемента), который можно хранить с итемом. При нажатии вверх-вниз соседние элементы могут обмениваться этими порядковыми номерами.