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

Вниз

ListBox с более 32000 итемов   Найти похожие ветки 

 
Sirakuz   (2003-08-19 16:33) [0]

Подскажите пожалуйста компонент типа TListBox, но с поддержкой > чем 32000 итемов. И ещё: почему TRichEdit и TListBox сделаны на одном классе TStrings, но Richedit поддреживает более 32000 итемов(строк), а листбокс - нет?


 
Miralex   (2003-08-19 16:37) [1]

А какая у тебя задача?


 
clickmaker   (2003-08-19 16:38) [2]

TListView

RichEdit - обертка для виндозного класса "RICHEDIT", где размер текста ограничен практически только памятью
А ListBox - обертка для класса "LISTBOX", который ограничен этим числом итемов, причем только в Win 9x. В NT/XP такого ограничения нет


 
KSergey   (2003-08-19 16:40) [3]

Пожлейте пользовтеля!
Как он будет листбоксить при кол-ве строк более 32тыщ?!!!!


 
Sirakuz   (2003-08-19 16:42) [4]

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


 
Miralex   (2003-08-19 16:42) [5]

с масивом пусть работает!
зачем ему стока строк?


 
Sirakuz   (2003-08-19 16:51) [6]

Ему стока строк не надо. Он(юзер) не должен их скролить. Он должен: набрать "а" и в список попали все слова с буквой "а". Потом ему захочется посмотреть начало списка и конец(списка). Потом это всё нужно сохранить в файл. А юзер с массивом работать не может :) . Ему нужно видеть промежуточный и окончательный результат своих действий


 
KSergey   (2003-08-19 17:07) [7]

А информацию откуда эта беоется? Может ему (пользователю) DBGrid сойдет? DataSet и в памяти можно организовать...


 
Игорь Шевченко   (2003-08-19 17:09) [8]

Program Files\Borland\Delphi\Demos\Virtual ListView


 
Sirakuz   (2003-08-19 17:18) [9]

Информация берётся не из базы, а из обычного текстового файла.

Посмотрел я TListView. Не то. Очень медленно работает(добавляет итемы, особенно где-то после 32000). Даже RichEdit работает во много (десятки) раз быстрее (Там ведь есть прямая ф-я "LoadFromFile"). Можно конечно RichEdit"у поставить ReadOnly и WordWrap=False тогда это будет что-то типа списка, но это не эстетично переходить со строки на строку курсором, а не маркером.


 
sniknik   (2003-08-19 17:31) [10]

КлиентДатаСет + ДбГрид, без ограничений на строки.


 
KSergey   (2003-08-19 17:35) [11]

sniknik © (19.08.03 17:31) дело говорит! Заполнять его из текстового файла - вот и все. И никаких БД не надо.

Вопроси попутно: (модератор, ну не надо удалять "расширяющие" вопросы, а?) TClientDataSet - это DataSet в памяти, готовый, встроенный
Почему часто для этого предлагают сторонние компоненты?


 
Sirakuz   (2003-08-19 17:50) [12]

Скажите plz в 2-х словах, как юзать этот КлиентДатаСет. FileName ставлю(что ещё ставить не знаю). Ставлю Active в True -"MisMatch in DataPacket".


 
sniknik   (2003-08-19 18:24) [13]

послал тест от одного COM обьекта, его создание закоментарил иначе у тебя бы ошибка была, и не нажимай "отправить" там вызовы остались.


 
sniknik   (2003-08-19 18:34) [14]

кстати чуть не забыл замени все вызовы
DataSet.FieldByName("ххххх").AsInteger:= ххххх;
на
DataSet.Fields[хх].AsInteger:= ххххх;
иначе на 32тысячах это замедлит заполнение (может не намного но...)
мне на 100 записях было все равно, нужна была наглядность.


 
Dred2k   (2003-08-19 20:50) [15]

> KSergey © (19.08.03 17:35) [11]
> встроенный

Как насчет dbclient.dll ?


 
Sirakuz   (2003-08-20 12:42) [16]

А я тут устроил BenchMark спискам:
Конфига компа: WinXP Prof SP1 Athlon 1.2 ГГц 256Mb
(80000 - т.к. в моём файле 80000 строк)

TListView:
ListView1.Items.BeginUpdate;
For i:=1 to 80000 do
ListView1.AddItem("123",nil);
ListView1.Items.EndUpdate;
>4минут(не стал ждать на 4-й минуте i~=7000)

TClientDataSet:
for i:= 1 to 80000 do begin
with DataSet do begin
Append;
Fields[0].AsString:= inttostr(i);
end;
end;
DataSet.Post;
-54 секунды;

RichEdit:
Richedit1.lines.LoadFromFile("c:\123.123"); //там 80000 строк
-4 секунды (!!!) - Вот он Идеал!!(Но это не совсем список :()


 
clickmaker   (2003-08-20 12:53) [17]

По поводу ListView: можно сначала быстренько заполнить видимую область, затем создать поток и в нем долить остальное. Пока доливаешь, юзер уже может начинать просматривать часть списка


 
Sirakuz   (2003-08-20 13:16) [18]

clickmaker, читай: на 4-й минуте i~=7000 . Это получается что 80000/7000 = 11,4; 11,4*4=45 минут должен ждать юзер чтобы увидеть конец списка. Лучше уж использовать ClientDataSet и поток. И всё равно это не то. Наверняка есть такой компонет, типа список, поддерживающий неограниченное количество строк, в котором есть функция loadFromFile.


 
BVP   (2003-08-20 14:53) [19]

если 32000 строк в TListBox это ограниечение Win98
(в Win2000 работает и это
for i:=0 to 650000 do
ListBox1.Items.Add("ff"+Inttostr(i));) то попробуй
TListView.
Ставь ListView1.OwnerData:=true.
Cобытие onData :
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption :="ff"+ SL.Strings[Item.index];//StringList:TStringList
end;
добавление строк:
...
var i:integer;
begin
SL.Clear;
for i:=0 to 80000 do
SL.Add("hh"+inttostr(i));//быстро
ListView1.Items.BeginUpdate;
ListView1.Items.Count:=SL.Count;
ListView1.Items.EndUpdate;
...
чтение из файла LS.LoadFromFile(opendialog1.FileName);
ListView1.Items.Count:=LS.Count;
(подробно см в $(DELPHI)\Demos\Virtual Listview)


 
sniknik   (2003-08-20 15:50) [20]

Sirakuz © (20.08.03 12:42) [16]
нашол что сравнивать!
Richedit1.lines. LoadFromFile("c:\123.123"); //там 80000 строк
(чтение сплошного файла)
и
ListView1. AddItem("123",nil);
Append; Fields[0].AsString:= inttostr(i);
(добавление позаписьно)

тогда уж сравнивай с ClientDataSet1.LoadFromFile предварительно сохраненые ClientDataSet1.SaveToFile("xxxx.cds", dfBinary);
те же 80000 тыс - 6сек
(дохлый пень 1000, 256памяти)
то же самое почти? не так ли? (только тут еще время на разбитие по записям добавляется)

а вообще сравни еще с BlockRead с нетипизированным файлом, еще быстрее будет.


 
DVM   (2003-08-20 17:15) [21]


> Sirakuz © (19.08.03 17:18) [9]


> Посмотрел я TListView. Не то. Очень медленно работает(добавляет
> итемы, особенно где-то после 32000).

Virtual ListView (или ListView в виртуальном режиме) очень быстро работает (1 000 000 итемов за 1-2 сек). Вам нужен именно он. Скорость добавления практически = скорости считывания их из источника, т.е. скорее всего плох ваш алгоритм заполнения.


 
Sirakuz   (2003-08-20 17:22) [22]

ДА! ClientDataSet1.LoadFromFile СУПЕР!(4 сек.)
А что там насчёт dbclient.dll ?(by Dred2k © (19.08.03 20:50) [15]) У меня такого файла нет.


 
clickmaker   (2003-08-20 17:45) [23]

Sirakuz © (20.08.03 17:22) [22]
ДА! ClientDataSet1.LoadFromFile СУПЕР!(4 сек.)
А что там насчёт dbclient.dll ?(by Dred2k © (19.08.03 20:50) [15]) У меня такого файла нет.


if Deplhi.Version > 4 then
dbclient.dll = midas.dll


 
sniknik   (2003-08-20 18:33) [24]

насчет мидаса можеш не волноватся если сделал как в посланом примере (MidasLib в uses) тогда dll не нужна.



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

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

Наверх





Память: 0.5 MB
Время: 0.009 c
4-11032
GreatLesh
2003-07-05 11:20
2003.09.04
Рисование на форме


14-10935
Skier
2003-08-15 08:53
2003.09.04
Энергетический коллапс в Штатах и Канаде


1-10833
oduvan
2003-08-21 09:24
2003.09.04
Как реализовать перемещение элементов в TTreeView вверх или вниз


4-11017
Deus
2003-07-03 23:24
2003.09.04
Как запустить ярлык (.lnk)??


14-10928
peps
2003-08-17 04:38
2003.09.04
компонент





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский