Главная страница
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.018 c
15-1219404029
cyborg
2008-08-22 15:20
2008.10.12
TDataGrid


15-1219126004
vajo
2008-08-19 10:06
2008.10.12
Подскажите с драйвером?


2-1220434352
Delphist
2008-09-03 13:32
2008.10.12
SQL-запрос


15-1219112093
Slider007
2008-08-19 06:14
2008.10.12
С днем рождения ! 19 августа 2008 вторник


3-1207049833
Александр Иванов
2008-04-01 15:37
2008.10.12
Запрос