![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отоброзить в ListBox`е большой StringList?
leonidus © (2006-07-09 01:19:00)Мастера подскажите пожалуйста, нужно в ListBox загрузить большой список итемов из TStringList`а. Если просто писать:
for i:=0 to StringList.count-1 do
listbox1.items.add(StringList.strings[i]);
то очень долго получается. Чую что нужно играться со стилем, используя что-то вроде lbVirtualOwnerDraw, но как с этим работать ума не приложу. Подскажите пожалуйста.
Leonid Troyanovsky (2006-07-09 13:20:00) [21]
> Юрий Зотов © (09.07.06 13:08) [20]
> Просто Мюллер больше не знал.
А может это происки цензуры.
--
Regards, LVT.
Юрий Зотов (2006-07-09 13:08:00) [22]> Ketmar © (09.07.06 12:58) [12]
Просто Мюллер больше не знал.
Ketmar (2006-07-09 13:07:00) [23]>Loginov Dmitry © (09.07.06 13:06) [16]
а кто мешает обновлять листбокс в отдельном потоке? %-)
Ketmar (2006-07-09 13:06:00) [24]>Мефисто (09.07.06 13:03) [15]
так мне делать нечего (да и неохота разумным-вечным заниматься), я пью пиво и отписываюсь в разные места. %-)
Юрий Зотов (2006-07-09 13:06:00) [25]> нужен именно ListBox, у него тоже есть что-то вроде OwnerData
Не OwnerData, а OwnerDraw. Эта штука отвечает за способ рисования строк, а не за способ задания данных.
Посмотрите LBS_NODATA - это не то, что Вам нужно?
Loginov Dmitry (2006-07-09 13:06:00) [26]Интересно, сколько времени будет виснуть прога, есть ее запускать из IDE.
:)
Мефисто (2006-07-09 13:03:00) [27]
> Ketmar © (09.07.06 12:58) [12]
Опередили :)
Мефисто (2006-07-09 13:02:00) [28]Перед заполнением:
Item.BeginUpdate;
после заполнения:
Item.EndUpdate;
Вроде так, чуть-чуть поможет.
Ketmar (2006-07-09 12:59:00) [29]вдогон: VirtualListBox не спасет?
Ketmar (2006-07-09 12:58:00) [30]>Юрий Зотов © (09.07.06 12:39) [10]
посмотрел на словарь Мюллера. говорят, 60 тыщ. хочу словарь с сотней тыщ.
>leonidus © (09.07.06 12:42) [11]
попробуй сделать BeginUpdate/EndUpdate. просто запрети перерисовку ручками. должно ускорится.
leonidus (2006-07-09 12:42:00) [31]Господа, пожалуйста помогите решить ДАННУЮ проблему, разбивать словарь на блоки нельзя. Повторяю с ListView все работало прекрасно, мне просто нужно туже технолгию перенести на ListBox.
Юрий Зотов (2006-07-09 12:39:00) [32]Удалено модератором
Ketmar (2006-07-09 12:34:00) [33]а ещё очень интересно, в каком это языке ажно сто тыщ словей?
Юрий Зотов (2006-07-09 12:11:00) [34]> leonidus © (09.07.06 11:51) [6]
Если Вы возьмете в руки обычный бумажный словарь, то увидите, что наверху каждой страницы в нем крупным жирным шрифтом напечатаны буквы алфавита.
Как Вы думаете, зачем это сделано?
PS
Если сверху Вашего листбокса приляпать, например, еще и комбобокс, то список слов в листбоксе сократится в 26 раз для английского языка и еще сильнее - для русского.
leonidus (2006-07-09 12:06:00) [35]Assign работает крайне медленно, это мне не подходит, т.к. спивок из 100.000 слов.
Для ListView я делал так:
var
list:tStringList;
...
...
list:=tstringlist.Create;
list.loadfromfile('...');
ListView1.OwnerData:=true;
ListView1.Items.Count := list.Count;
а потом:
procedure TForm2.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := list[Item.Index];
end;
но по ряду причин компонент ListView меня не устраивает, мне нужен именно ListBox, у него тоже есть что-то вроде OwnerData, но я не пойму как с ним работать.
leonidus (2006-07-09 11:51:00) [36]У меня словарь, в ListBox загружен список слов, поэтому там на самом деле должен быть большой список слов, тут ничего не поделаешь...
Ketmar (2006-07-09 11:42:00) [37]Удалено модератором
YurikGL (2006-07-09 11:20:00) [38]
> Имхо, сначала стоит осознать, что "большой" список или текст
> в визуальном контролле - есть весьма изрядное неудобство
> для пользователя!
Не согласен.... если это список из пары тысяч городов, и один из городов нужно выбрать, то весьма обосновано запихать пару тысяч городов в визуальный компонент. Правда, в этом случае, лучше уже на БД переходить.
procedure TForm1.Button1Click(Sender: TObject);
var
slVr:tStringList;
begin
slVr:=TStringList.Create;
slVr.Add('Некий текст');
ListBox1.Items.Assign(slVr);
slVr.Free;
end;
Германн (2006-07-09 02:28:00) [39]Имхо, сначала стоит осознать, что "большой" список или текст в визуальномконтролле - есть весьма изрядное неудобство для пользователя!
KilkennyCat (2006-07-09 01:35:00) [40]ListBox1.Items.Assign(StringList); наверное, так...