Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TListView: переместить Items [D7]


IvanIvan ©   (2008-09-04 20:39:00) 

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


Deltas   (2008-09-05 18:27:00) [1]

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


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


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


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

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

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

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


korneley   (2008-09-05 10:57:00) [3]

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


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

Так... сам напросился. Наказываю за буквоедство. Вот куски из 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. Не спорь с дяденьками. В ЦК не дураки сидят, днем на Солнце не посылают.


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

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

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

Буквоед (с:)


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

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

Буквоед (с:)


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо