Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

как поменять местами строки ListView?   Найти похожие ветки 

 
Zahadum ©   (2007-05-12 15:59) [0]

Подскажите, пожалуйста-
как поменять местами строки ListView?
Т.е.:
2-я строка (выделена)--> жмём "\/"--> 2-я становится 3-ей (3-я, соответственно, второй)

И то-же самое вверх ( "/\" )


 
DVM ©   (2007-05-12 16:03) [1]


> как поменять местами строки ListView?

Как бы ты поменял местами значения двух переменных? Чем ListView хуже?

Есть еще один способ правда. Написать свою функцию сортировки и вызывать ее в нужный момент. Сортировать она будет по какому-то значению (например порядковый номер элемента), который можно хранить с итемом. При нажатии вверх-вниз соседние элементы могут обмениваться этими порядковыми номерами.


 
Zahadum ©   (2007-05-12 16:13) [2]

Как бы ты поменял местами значения двух переменных? Чем ListView хуже?

Тем, что у ListView может быть 2, 3, 4 ... 50 колонок!
Это ж какую процедуру писать надо:
1. создать массив,
2. заполнить его значениями из выбранной строки
3. присвоить значения третьей строки - второй (2-я строка = 3-ей)
4. заполняем 3-ю строку из массива

Может, что по-проще есть?


 
DVM ©   (2007-05-12 16:19) [3]


> Это ж какую процедуру писать надо:
> 1. создать массив,
> 2. заполнить его значениями из выбранной строки
> 3. присвоить значения третьей строки - второй (2-я строка
> = 3-ей)
> 4. заполняем 3-ю строку из массива
>
> Может, что по-проще есть?

Ну ты и фантазер, ей богу! Массив!

А создать динамически TListItem и скопировать в него все данные, пробежвашись по всем Subitems нельзя что ли? Потом еще раз обратная операция.


 
DVM ©   (2007-05-12 16:26) [4]

Типа того:


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;



 
Zahadum ©   (2007-05-12 16:32) [5]

Благодарю!


 
{RASkov} ©   (2007-05-12 17:23) [6]

> 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); - Вниз



Страницы: 1 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.077 c
2-1178971175
Zahadum
2007-05-12 15:59
2007.06.03
как поменять местами строки ListView?


1-1175784784
DelphiLexx
2007-04-05 18:53
2007.06.03
Как в компоненте TDBTreeView один из элементов выделить жирным


2-1178996245
likenoother
2007-05-12 22:57
2007.06.03
из Timage в Tpaintbox


15-1178456078
raqy.style
2007-05-06 16:54
2007.06.03
формирование фильтра


2-1178863950
allucard
2007-05-11 10:12
2007.06.03
Ресурсы ехе