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

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

Можно ли назначить 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]

Можно, но вероятно, что потом будешь бороться с невалидными ссылками.


Наверх

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