Динамическое создание компонентов в Delphi

Delphi позволяет создавать компоненты не только размещая из на форме с помощью мыши, но и в программном коде непосредственно в ходе выполнения программы. Для этого требуется всего лишь на всего создать экземпляр класса компонента, задать родителя компонента и соответствующие параметры визуального оформления.

Например:

В результате на форме при нажатии кнопки появится новый компонент TLabel/

Динамически созданный компонент

Созданные подобным образом компоненты могут быть изменены только программно так как их изначально нет на форме (фрейме, модуле данных). Они создаются в процессе работы программы и поэтому они недоступны для визуального редактора. Именно по этой причине необходимо прямое указание параметров внешнего вида.

Назначать обработчики событий для таких компонентов также необходимо непосредственно в коде программы. В качестве примера зададим обработчик события OnClick для компонента TLabel созданного ранее.

Здесь LabelClick имя процедуры обработчика события.

В отношении любых динамических ресурсов необходимо следовать простому правилу – «ресурс взял – ресурс отдал. Чем скорее, тем лучше». Динамически создаваемые компоненты не исключение. Их необходимо уничтожать сразу же, как только отпадает необходимость в их использовании.

Сделать это можно одним из двух равнозначных способов. Первый состоит в том, чтобы вызвать метод Free компонента и затем присвоить соответствующей переменной значение nil.

Второй способ состоит в использовании процедуры FreeAndNil, которая выполнит оба указанных действия.

После применения любого из этих способов компонент будет полностью уничтожен, а занимаемые им ресурсы освобождены.

Работа с динамически создаваемыми компонентами имеет одну тонкость, связанную с особенностями работы редактора кода Delphi.

Если эти компоненты объявить в той же секции описания класса формы (фрейма, модуля данных), что и «обычные» компоненты, при компиляции Delphi будет выдавать ошибку о том, что данное поле класса не сопоставлено ни с одним из компонентов (что естественно) и предложит его удалить.

Сообщение об ошибке

Чтобы этого избежать рекомендуется объявлять динамически созданные компоненты в других секциях. Например, private или public.

Неправильно:

Правильно:

Один комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *