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

Вниз

TListView: переместить Items   Найти похожие ветки 

 
IvanIvan   (2008-09-04 20:39) [0]

Есть TListView (ReportStyle), как во время работы программы передвигать Item ниже выше в списке?


 
Сергей М. ©   (2008-09-04 20:45) [1]

Удалить его и создать в новой нужной позиции (см. TListItems.Insert)


 
Юрий Зотов ©   (2008-09-04 22:10) [2]

Небольшое уточнение - не создать, а вставить. То есть, создавать новый Item не нужно, нужно вызвать Items.Delete, затем Items.AddItem. И не забыть про BeginUpdate - EndUpdate и try-finally.


 
Германн ©   (2008-09-05 01:02) [3]

Ещё одно совсем маленькое уточнение. "Удалить" подразумевает только удаление TListItem из списка Items. Но никак не уничтожение ни того TListItem, который нужно переместить, ни ссылки на него. А значит ссылку следует сначала запомнить в какой-то переменной, а уж потом вызвать Items.Delete.

Буквоед (с:)


 
Германн ©   (2008-09-05 01:58) [4]

И ещё одно совсем уж крошечное уточнение. У TListView.Items нет метода AddItem. А Insert есть.

Про то, что Add переводится как "добавить" я уж совсем молчу.

Буквоед (с:)


 
Юрий Зотов ©   (2008-09-05 03:13) [5]

Так... сам напросился. Наказываю за буквоедство. Вот куски из ComCtrls.pas (D7):

function TListItems.AddItem(Item: TListItem; Index: Integer): TListItem;
begin
 if Item = nil then
   Result := Owner.CreateListItem
 else
   Result := Item;
 if Index < 0 then
   Index := Count;
 ListView_InsertItem(Handle, CreateItem(Index, Result));
end;

function TListItems.Insert(Index: Integer): TListItem;
begin
 Result := AddItem(nil, Index);
end;


1. Как видим, метод AddItem все же есть (и он даже public).

2. Как видим, несмотря на то, как переводится слово "Add", этот метод делает именно то, что нам и требуется.

3. Как видим, метод Insert делает как раз совсем не то, что нам требуется.

4. Не спорь с дяденьками. В ЦК не дураки сидят, днем на Солнце не посылают.


 
korneley ©   (2008-09-05 10:57) [6]

А ещё это можно сделать сортировкой, определив соответствующим образом ListView.OnCompare, и манипулируя, например, значением свойства Data у ListItem - а :)


 
Германн ©   (2008-09-05 14:02) [7]


> Так... сам напросился. Наказываю за буквоедство. Вот куски
> из ComCtrls.pas (D7):


> 1. Как видим, метод AddItem все же есть (и он даже public).

Вот ещё одно яркое свидетельство, что призывы типа "Читай Справку, Там Всё Написано" очень вредны. Ибо справка в Дельфи живет своей собственной жизнью. Никак не связанной с исходниками. В исходниках Д6 тоже есть этот метод, а в справке нет.

> 4. Не спорь с дяденьками. В ЦК не дураки сидят

Да если б там сидели дураки разве я стал бы спорить! :)


 
Deltas ©   (2008-09-05 18:27) [8]

А вот в D5 действительно нет метода function TListItems.AddItem(Item: TListItem; Index: Integer): TListItem; Приходится сначала вставлять пустой объект класса TListItem: function TListItems.Insert(Index: Integer): TListItem;, а потом менять его свойства при помощи метода procedure TListItem.Assign(Source: TPersistent);



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
6-1191700142
Prostoy_paren
2007-10-06 23:49
2008.10.12
Вопрос по получению данных из соединения


2-1220437821
Term
2008-09-03 14:30
2008.10.12
AdvStringGrid


15-1219290494
Slider007
2008-08-21 07:48
2008.10.12
С днем рождения ! 21 августа 2008 четверг


3-1207245676
kotyara12
2008-04-03 22:01
2008.10.12
Рекурсивная выборка из таблицы со структурой дерева


2-1220611069
Mundrik
2008-09-05 14:37
2008.10.12
Защита от перезаписи кодав памяти