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, но как с этим работать ума не приложу. Подскажите пожалуйста.


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.


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

Наверх

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