![]() |
| ||
|
|
Новости |
Поиск |
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, но как с этим работать ума не приложу. Подскажите пожалуйста.
murzz (2006-07-11 10:13:00) [1]Быстрее всего ListBox.Items := StringList;
Мефисто (2006-07-10 18:49:00) [2]
> atruhin © (10.07.06 17:28) [39]
В списке только ключивые слова :) В словариках еще словарные статьи.
При инсталяции лингво вдобавок производит индексирование словарей (если верить надписям инстолятора). Еще там реализация подключения/отключения тематических словарей т.е. примерно, как ЮЗ про алфавитный указатель намекнул. Так что, там тоже не все так просто ;)
atruhin (2006-07-10 17:28:00) [3]> Можно еще глянуть как в электронных словарях-переводчиках
> реализовано.
В Lingvo именно как у автора. Т.е. весь словарь в одном списке.
StriderMan (2006-07-10 17:09:00) [4]Господа, а зачем собственно, из одного Листа в другой гонять?
почему бы сразу не загрузить в ListBox.Items?
tButton (2006-07-10 08:22:00) [5]
> for i:=0 to StringList.count-1 do
> listbox1.items.add(StringList.strings[i]);
//listbox1.Clear; // <--опционально
listbox1.items.addStrings(StringList.strings);
begin...end (2006-07-10 07:20:00) [6]> Ketmar © (10.07.06 00:35) [35]
> что-то вроде "режима" и что-то вроде "свойства" -- вещи,
> мягко говоря, разные...
Разные. И что?
Ketmar (2006-07-10 00:35:00) [7]>leonidus © (09.07.06 22:41) [34]
ни разу не закрыто.
>begin...end © (09.07.06 20:03) [28]
что-то вроде "режима" и что-то вроде "свойства" -- вещи, мягко говоря, разные...
leonidus (2006-07-09 22:41:00) [8]begin...end большое вам спасибо.
Обсуждение закрыто.
YurikGL (2006-07-09 21:40:00) [9]
> Assign работает крайне медленно, это мне не подходит, т.
> к. спивок из 100.000 слов.
100 000 слов? а можно описать задачу более широко?
Может все же на БД перейти?
Можно еще глянуть как в электронных словарях-переводчиках реализовано. Уверен, что там никто в визуальный контрол все слова не грузит.
Мефисто (2006-07-09 21:16:00) [10]Удалено модератором
begin...end (2006-07-09 21:09:00) [11]Удалено модератором
Юрий Зотов (2006-07-09 21:02:00) [12]> begin...end © (09.07.06 20:03) [28]
> Поменьше, извините, самомнения
Вот и я о том же.
KilkennyCat (2006-07-09 20:09:00) [13]все будет хорошо...
begin...end (2006-07-09 20:03:00) [14]> Юрий Зотов © (09.07.06 19:36) [27]
> Буду весьма Вам признателен, если в [7] Вы вообще найдете
> хотя бы одно слово "свойство".
Там был приведён код, в котором использовалось именно свойство.
> То есть о чем-то вроде режима...
То есть, о чём-то вроде свойства ...
> когда данные для отображения в контроле предоставляются
> извне. Такой режим ListBox'а включается установкой стилей,
> которые называются LBS_OWNERDRAWxxx
Такой режим ListBox'а (аналогичный режиму ListView'а с Owner Data = True, т.е. когда " данные для отображения в контроле предоставляются извне") включается установкой стиля, который называется LBS_NO DATA , а не LBS_OWNER DRAW xxx. Хотя последний и должен тоже присутствовать.
> И если Вы не поняли, ЧТО имелось в виду, то вряд ли Вам
> стоило "наезжать" по этому поводу на кого-то другого.
А Вы в [22] где-то увидели "наезд"? Если да, то извините, но это как раз Вы не поняли, ЧТО имелось в виду.
> Предлагалось "обратить внимание" - то есть, посмотреть,
> что означает этот стиль и, если окажется, что это действительно
> то, что нужно, то найти, как он включается в VCL.
В [17] не давалось никаких направлений на поиск в VCL. К тому же, неясно, зачем искать, где что-то включается в исходниках VCL, когда вместо этого достаточно прочитать справку по свойствам.
> ...решение в сверхразжеванном виде...
Скорее, рациональное решение. А сверхразжёванного решения я не давал, пока об этом не попросил сам автор (см. [23], [24]).
> ничто не мешало адресовать пост [22] непосредственно автору
> вопроса, а в нем, вместо наездов...
Ещё раз -- где в [22] Вы увидели какие-то наезды?
Поменьше, извините, самомнения -- и всё будет чудесно.
Юрий Зотов (2006-07-09 19:36:00) [15]> begin...end © (09.07.06 18:04) [26]
> в [7] говорилось о свойстве OwnerData
Буду весьма Вам признателен, если в [7] Вы вообще найдете хотя бы одно слово "свойство".
Я не нашел. Было сказано " что-то вроде OwnerData". То есть о чем-то вроде режима, когда данные для отображения в контроле предоставляются извне. Такой режим ListBox'а включается установкой стилей, которые называются LBS_ OWNERDRAW xxx, а не LBS_ OWNERDATA xxx - о чем и было сказано. И если Вы не поняли, ЧТО имелось в виду, то вряд ли Вам стоило "наезжать" по этому поводу на кого-то другого.
Еще такой режим включается установкой стиля LBS_NODATA - на который и было предложено обратить внимание.
> мне непонятно, зачем непосредственно управлять стилем окна
Снова буду весьма Вам признателен, если Вы найдете цитатку, в которой предлагалось управлять стилем окна "непосредственно".
Я не нашел и этого тоже. Предлагалось "обратить внимание" - то есть, посмотреть, что означает этот стиль и, если окажется, что это действительно то, что нужно, то найти, как он включается в VCL. И если Вы снова не поняли, ЧТО имелось в виду, то Вам снова вряд ли стоило "наезжать" по этому поводу на кого-то другого.
Ну а если Вам так уж захотелось дать человеку решение в сверхразжеванном виде, то и в этом случае ничто не мешало адресовать пост [22] непосредственно автору вопроса, а в нем, вместо наездов, просто написать: "Установите Style=lbVirtual и используйте OnData".
То есть: поменьше, извините, выпендрежа - и все было бы чудесно.
begin...end (2006-07-09 18:04:00) [16]> Юрий Зотов © (09.07.06 14:26) [25]
> Вы ни за что не поверите, но о свойстве никто и не говорил.
> Перечитайте ветку.
Вы ни за что не поверите, но в [7] говорилось о свойстве OwnerData у ListView, и предполагалось, что у ListBox есть что-то подобное. В ответ на это Вы в [17] сообщили, что у ListBox ничего "что-то вроде" OwnerData нет, а есть OwnerDraw. На самом же деле "что-то вроде" есть и для OwnerData, и для OwnerDraw (в том числе и одновременно) -- это как раз свойство Style, о котором Вы не упомянули.
> Вы снова ни за что не поверите, но это и есть именно тот
> самый LBS_NODATA, о котором говорилось в [17].
Вы снова ни за что не поверите, но я знаю, на что влияет свойство Style. Однако мне непонятно, зачем непосредственно управлять стилем окна вместо того, чтобы воспользоваться готовым свойством.
Юрий Зотов (2006-07-09 14:26:00) [17]> begin...end © (09.07.06 13:40) [22]
> Свойства OwnerDraw у ListBox'а тоже нет.
Вы ни за что не поверите, но о свойстве никто и не говорил. Перечитайте ветку.
> Зато есть свойство Style, которое можно установить равным lbVirtual и
> использовать обработчик OnData.
Вы снова ни за что не поверите, но это и есть именно тот самый LBS_NODATA, о котором говорилось в [17].
begin...end (2006-07-09 14:13:00) [18]> leonidus © (09.07.06 13:47) [23]
На форме -- ListBox с Style = lbVirtual. А код такой:
type
TMyForm = class(TForm)
ListBox: TListBox;
procedure FormCreate(Sender: TObject);
procedure ListBoxData(Control: TWinControl; Index: Integer;
var Data: String);
procedure FormDestroy(Sender: TObject);
private
StringList: TStringList;
end;
procedure TMyForm.FormCreate(Sender: TObject);
var
I: Integer;
begin
StringList := TStringList.Create;
for I := 1 to 1000 do
StringList.Add(IntToStr(I));
ListBox.Count := StringList.Count;
end;
procedure TMyForm.ListBoxData(Control: TWinControl; Index: Integer; var Data: String);
begin
Data := StringList[Index]
end;
procedure TMyForm.FormDestroy(Sender: TObject);
begin
StringList.Free
end;
leonidus (2006-07-09 13:47:00) [19]begin...end а можно маленькой примерчик?
begin...end (2006-07-09 13:40:00) [20]> Юрий Зотов © (09.07.06 13:06) [17]
Свойства OwnerDraw у ListBox'а тоже нет. Зато есть свойство Style, которое можно установить равным lbVirtual и использовать обработчик OnData.