![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отображение большого TStringlist`а в TListBox [D6, WinXP]
leonidus © (2006-05-06 22:04:00)Мастера подскажите пожалуйста. Есть Tstringlist в нем содержится порядка 130.000 записей, и есть TListBox, нужно сделать так что бы данные из Tstringlist отображались в TListBox`е но подгружались в него по мере необходимости (прокрутки) а не все сразу в момент инициализации приложения. Подскажите пожалуйста как это сделать. Только прошу не пинать за то, что такое большое кол-во записей отображается в визуальном компоненте, юзеры этого не испугаются т.к. это приложение - словарь с окном отображающим спосок слов как в Lingvo.
begin...end (2006-05-07 08:35:00) [1]Я бы использовал виртуальный ListBox. Устанавливаем его свойство Style в lbVirtual, свойство Count -- равному значению количества элементов в списке TStringList, и пишем примерно такой обработчик OnData:
procedure TMyForm.MyListBoxData(Control: TWinControl; Index: Integer; var Data: String);
begin
Data := List[Index]
end
(здесь List -- это и есть некий "внешний" TStringList).
В результате, когда нужно будет отобразить элемент с индексом Index, автоматически будет вызываться обработчик OnData, т.е. данные в ListBox будут подгружаться по мере необходимости. Что и требовалось.
ЛшдлуттнСфе (2006-05-06 22:13:00) [2]что-то намудрил...
for i := start to start + HListBox do listbox1.add(tstringlist1[ i]);
Kilkennycat (2006-05-06 22:12:00) [3]ну так пишем цикл
for i := start to start + HListBox do listbox1.add(tstringlist1[start+HListbox - i]);
где start - положение "ползунка" в стринглисте, HListBox - сколько будет отображено в листвоксе. Добавить проверку начала и конца, старт-стоп апдейта и все...