![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли назначить ListBox.Items без копирования ? [D7, XP]
b/@. © (2009-07-09 12:07:00)Добрый день.
Занимаюсь оптимизацией модуля, и возник вот такой вопрос...
Припустим у нас есть некий глобальный справочник такого вида
январь
февраль
март
...
это может быть любой упорядоченый список строковых значений, список филиалов, подписка журнала мурзилка или подобное, и этот список грузиться в начале работы программы в
spisok: TStringList;.
И есть несколько диалоговых окон, в котором из этого списка нужно чтото выбрать и вернуть индекс выбора пользователю.
При этом в этом диалоговом окне при назначении ListBox.Items этого списка - получается как-бы две копии одного и того же списка.
Внимание вопрос:
Можно ли каким-то образом назначить ListBox.Items список строк, чтобы при этом не происходило создание двух экземпляров списка ?
Loginov Dmitry (2009-07-09 20:56:00) [1]
> При этом в этом диалоговом окне при назначении ListBox.Items
> этого списка - получается как-бы две копии одного и того
> же списка.
>
> Внимание вопрос:
> Можно ли каким-то образом назначить ListBox.Items список
> строк, чтобы при этом не происходило создание двух экземпляров
> списка ?
К чему такие усложнения? Неужели памяти перестало хватать? Или при копировании программа виснет?
Тогда - база данных!
b/@. (2009-07-09 15:57:00) [2]
> sniknik © (09.07.09 15:11) [4]
> это уже сделано для баз, данные вынесены в отдельные рекордсеты, а визуальные компоненты только их отображают.изучай.
Спасибо. Посмотрю.
Просто была мысль - для "списочных" контролов c выбором, таких как ListBox, ComboBox, RadioGroup, CheckListBox и т.п. сделать возможность внешнего источника строк, чтобы не дублировать по десять раз...
И. Павел (2009-07-09 15:13:00) [3]
> И есть несколько диалоговых окон, в котором из этого списка
> нужно чтото выбрать и вернуть индекс выбора пользователю.
>
Можно при вызове диалогового окна менять Parent у ListBox на это окно. Правда, координаты, align и др. тоже придется перенастраивать.
sniknik (2009-07-09 15:11:00) [4]> хотелось бы единый механизм как для ListBox так и для ComboBox ?
это уже сделано для баз, данные вынесены в отдельные рекордсеты, а визуальные компоненты только их отображают.
изучай.
b/@. (2009-07-09 14:34:00) [5]
> Palladin © (09.07.09 12:51) [2]
> TListBox.Style:=lbVirtual;
Можно и так - но хотелось бы единый механизм как для ListBox так и для ComboBox ?
> Anatoly Podgoretsky © (09.07.09 12:37) [1]
> Можно, но вероятно, что потом будешь бороться с невалидными ссылками.
А как ?
Пробовал делать
Items.Free();
Items := spisok;
Но вываливается AV при этом - наверное из-за того что пытается выполниться SetItems у уже освобожденного класса.
Впринципе можно сделать обёртку и перенести FItems в паблик - но так делать хочеться в последнюю очередь... может как то иначе можно заставить думать ListBox, что нужно обращаться не к своему списку а к моему ?
Palladin (2009-07-09 12:51:00) [6]TListBox.Style:=lbVirtual;
Anatoly Podgoretsky (2009-07-09 12:37:00) [7]> b/@. (09.07.2009 12:07:00) [0]
Можно, но вероятно, что потом будешь бороться с невалидными ссылками.