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

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

Как отоброзить в ListBox`е большой StringList?


Страницы:   1 2 3

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); наверное, так...


Страницы:   1 2 3

Наверх

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