Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Вниз

ПРоблема с ТListView   Найти похожие ветки 

 
Виталий   (2008-02-06 14:45) [0]

Добрый день
Проблема следующая. Надо В ТListView вставлять итемы в алфавитном порядке. Использую следующий код

for i:=0 to count-1 do
 begin
      //Поиск места вставки
      Organizer_MainForm.OMS.Local_Storage_Plugin.GetCategorieName(CategoryID[i],name) ;

if ListView1.Items.Count<>0 then begin
j:=1;
     while (j<=ListView1.Items.Count)and(name>listView1.Items.Item[j-1].Caption) do
        inc(j);

   NewItem:=ListView1.Items.Insert(j-1);
  end
 else NewItem:=Listview1.Items.add;

  NewItem.ImageIndex:=0;
  NewItem.Caption:=name;

  end;

Места для вставки определяються верно но теме не менне итем вставленный Add( то есть самый первый) всегда оказываеться самым последним) А если ListView пустой то Insert не работает. Если заранее вставить пустой Item то все нормально сортируеться. Использую библиотеку CLX.


 
DimaBr ©   (2008-02-06 15:28) [1]

Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


 
Сергей М. ©   (2008-02-06 15:37) [2]


> итем вставленный Add( то есть самый первый) всегда оказываеться
> самым последним


На то и Add, чтобы дополнить список добавлением элемента в конец этого сптиска.


> если ListView пустой то Insert не работает


Нафига же вставлять что-то туда куда оно по элементарной логике вставлено быть не может ?

Если список пуст, то очевижнго же, что решением является Add()


 
Сергей М. ©   (2008-02-06 15:39) [3]


> если ListView пустой то Insert не работает


Он, Insert, у тебя и не вызывается, если список пустой.
Как он при этом может "не работать" - совершенно не понятно)


 
clickmaker ©   (2008-02-06 15:41) [4]

function TListItems.Add: TListItem;
begin
 Result := AddItem(nil, -1);
end;

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


 
Сергей М. ©   (2008-02-06 15:42) [5]

И гораздо проще и очевидней другое решение : не искать никакие "места вставки", а заполнить список в любом порядке и после этого одним махом отсортировать этот список.


 
Виталий   (2008-02-06 16:25) [6]

Сергей М. ©   (06.02.08 15:39) [3]
>Он, Insert, у тебя и не вызывается, если список пустой.
>Как он при этом может "не работать" - совершенно не понятно)

потому и не вызываеться что не работает. надо организовать работу с базой данных так как в моем компьютере. Т.е. Есть база данных в которой таблица папок и таблица модулей в этих папках. папки могут быть вложены друг в друга.И при двойном щелчке по итему, если это папка получаем сначала список папки содержащихся в выбранной папке сортируем его, потом получаем список модулей сортируем его. вариант получать уже сортированный список из базы данных не подходит потому что название папки может быть в кавычках. которые надо отображать но при сортировке не учитывать. А проблема в том что первый элемент вставляеться Add. Потом к примеру получаем что следущий итем должен быть вставлен после этого, на позицию 1. но когда вставляем инсертом он всеравно вставляеться перед первым. И получаеться что все папки отсортированные а та пака которая была вставлена Add. Оказываеться последней.


 
Сергей М. ©   (2008-02-06 16:31) [7]


> потому и не вызываеться что не работает


Бред какой-то ...

Какое отношение иетоды объекта TListView.Items имеют к какой-от там твоей супер-пупер-базеданных ?

Никакого абсолютно.


 
Виталий   (2008-02-06 16:35) [8]

пробовал  NewItem:=Listview1.Items.additem(nil, -1);
показывает ошибку List index out of bounds(0); на Insert(-1) тоже самое.


 
Виталий   (2008-02-06 16:43) [9]

>Какое отношение иетоды объекта TListView.Items имеют к какой-от там >твоей супер-пупер-базеданных ?

База данных вовсе не супер пупер, и проблема не в ней. а именно спрашиваю как вставить то что из нее получаеться в алфавитном порядке  TListView. Может я чего то не понимаю. Но первый Item у меня получилось вставить только Add. А все последущие вставляються Insert(j-1). И например первая пака была "Иностранный язык", она вставляеться Add. Следущая папка "Математика". получаем j=2. То есть вставлять надо после, иностранного языка. а всеравно папка математика оказываеться на первом месте.


 
Сергей М. ©   (2008-02-06 16:52) [10]


> База данных вовсе не супер пупер, и проблема не в ней


А зачем тогда упомянул ?


> как вставить то что из нее получаеться в алфавитном порядке


Не надо ничего "вставлять в алфавитном порядке".

Вставляй в порядке выборки.

После того как добавишь/вставишь все элементы своей древовидной структуры, запусти сортировку. На то есть спецметоду у объектов, имеющих отношение к классу TTreeView


 
Виталий   (2008-02-06 16:57) [11]

А как потом модули отсортировать. Надо же чтобы сначала папки отображались потом только модули.


 
Сергей М. ©   (2008-02-06 16:59) [12]


> как потом модули отсортировать


Какие еще "модули" ?

Оперируй терминами "узел TTreeView". Там нет никаких "модулей".


 
icWasya ©   (2008-02-06 17:00) [13]

Insert (Index) всавляет элемент ПЕРЕД Index, а не после.

j:=0;
while (j<ListView1.Items.Count)and(name>listView1.Items.Item[j].Caption) do    inc(j);

if j <ListView1.Items.Count then
  NewItem:=ListView1.Items.Insert(j)
else
 NewItem:=Listview1.Items.add;


 
Сергей М. ©   (2008-02-06 17:06) [14]

Пардон, речь идет, конечно же, о TListView.
Почему-то меня заклинило на TTreeView)

У объекта класса TListView есть замечательный метод CustomSort - он отсортирует тебе элементы списка так как тебе заблагорассудится и вне зависимости от изначального порядка добавления элементов в список.


 
Сергей М. ©   (2008-02-06 17:14) [15]

В простейшем же случае (а у тебя он простейший) достаточно после заполнения списка вызвать метод AlphaSort.


 
Виталий   (2008-02-06 17:17) [16]

а есть у Item  свойство где можно хранить ID папки? Id- значение
LongInt


 
Сергей М. ©   (2008-02-06 17:27) [17]

Есть.

Data оно зовется.


 
MsGuns ©   (2008-02-06 22:40) [18]

Для хранения данных о базеданных (хе-хе-хе) использовать TList, для сортировки которого написать соотв. код.
Листвью только для отображения



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

Форум: "Основная";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
3-1210168602
dreamse
2008-05-07 17:56
2008.11.23
Пробелмы с компонентами


15-1221828560
Inzati
2008-09-19 16:49
2008.11.23
Термопринтеры / Киоски самообслуживания


2-1224142845
Нов_и_чок
2008-10-16 11:40
2008.11.23
Из DBF в MDB


6-1195631001
novill
2007-11-21 10:43
2008.11.23
Как получить показания времени на удаленной машине по сети?


15-1222355428
БарЛог
2008-09-25 19:10
2008.11.23
Алгоритмы поиска частей лица





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский