![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| vvkatom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 27.10.2010 Репутация: нет Всего: нет |
Всем привет.
Проблема состоит в следующем: на форме создаётся несколько групп кнопок, описанных так: TopButtons: array [0..20] of TDxButton; RButtons: array [0..100] of TDxButton; LButtons: array [0..100] of TDxButton; они формируются в зависимости от действий пользователя в различном количестве и качестве на панелях. Визуально они стираются через очистку панелей, например: TopPanel.Free; Но, как оказалось, память не высвобождается и, на слабеньких машинах, быстро заканчивается. Думал решить эту проблему через процедуру: FreeAndNil, но код: FreeAndNil(TopButtons); высвобождает только первый элемент массива. Можно конечно сделать очистку в цикле, но хотелось бы вычищать весь массив сразу. Подскажите пожалуйста, может есть какие-то другие процедуры или возможность очистки массива целиком? Заранее спасибо. |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Вместо массива пользуйся TObjectList
|
|||
|
||||
| vvkatom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 27.10.2010 Репутация: нет Всего: нет |
хорошо, а как мне тогда в коде обратится к свойствам кнопок (цвет, положение и т.д.)?
щас всё идёт: TopButtons[i].Colors.BackgroundTo:=clLime; TopButtons[i].Align := Alnone; TopButtons[i].Left := 152 * (i mod c); TopButtons[i].Top := 52 * (i div c); ... |
|||
|
||||
| БелАмор |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 5 Всего: 17 |
Посмотрите ссылки (а также ссылки по ссылкам):
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=57952 http://www.delphikingdom.com/asp/answer.asp?IDAnswer=71499 http://www.delphikingdom.com/asp/answer.asp?IDAnswer=60756 Жизнь и смерть в режиме run-time
В FreeAndNil следует передавать только ссылки на экземпляры классов. Вы же передали туда ссылку на начало статического массива, которая указывает на первый элемент этого массива. В этом случае, после грубого приведения типа ссылки, фактически выполняется FreeAndNil(TopButtons[0]).
После прочтения приведённых ссылок предлагаю подумать на тему "а нужны ли вообще массивы со ссылками на динамически создаваемые кнопки?"
Избавиться от массивов как лишнего элемента (если нет другой причины их держать). А кнопки уничтожать, уничтожая панель, на которой они находятся. Либо циклом от конца к началу по Controls панели, если нежелательно уничтожать панель. |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |