|
||||||||
|
Класс TComponent
Предком для всех компонентов библиотеки является класс TComponent. Он содержит несколько свойств и методов, общих для всех потомков. В первую очередь, каждый компонент обладает собственным именем. Под этим именем он находится в списке Инспектора объектов и других составных частей среды Delphi:
Имя компонента не может быть пустой строкой; в модуле не может быть и двух компонентов с одинаковыми именами. Обратите внимание на то, что это не просто то имя, которое использует программист при обращении к свойствам и методам компонента, а компилятор ? при компиляции этих обращений. Компонент знает свое имя на этапе выполнения программы, но что еще более важно ? на этапе визуального проектирования приложения (будем называть его еще этапом разработки). В каждом компоненте опубликовано также свойство
которое не используется системой и может быть изменено разработчиком по своему усмотрению. Все компоненты в программе взаимосвязаны: каждый компонент имеет владельца и сам может быть владельцем других компонентов, которые сведены в список. Указатель на владельца есть свойство:
Положение объекта в списке его владельца можно узнать и изменить, пользуясь свойством:
В конструкторе каждому компоненту передается указатель на Owner; это означает, что компонент будет находиться в списке этого владельца. Какой смысл в создании такого списка? Те, кто писал программы с использованием OWL, помнят, что у объектов этой библиотеки были конструкторы с большим количеством параметров; иногда конструкторов; было несколько. У компонента же определение конструктора на удивление лаконично, но в нем присутствует указатель на Owner:
Ответ прост: Owner ? тот объект, который при создании вызывает конструкторы всех объектов, владельцем которых он является, а при уничтожении ? их деструкторы. Таким образом, поместив при разработке компонент на форму, вы можете не заботиться о его создании и уничтожении в программе. Все свойства таких компонентов и все связи между ними запоминаются в файле формы .DFM и при запуске приложения создаются вновь автоматически. Деструктор компонента
уничтожает все дочерние компоненты (вызывая их деструкторы) и вычеркивает себя из списка компонента-владельца. Конструкторы нужно вызывать только для тех компонентов, которые создаются вами во время исполнения. При этом они получат владельца и явный вызов деструктора не понадобится. Практически все конструкторы и деструкторы описанных ниже компонентов имеют тот же вид, что приводится здесь. Поэтому в дальнейшем их описания опущены, где это возможно. Принадлежащие компоненты оформлены в виде списка, доступного через свойство Components. В классе TComponent предусмотрен набор методов и свойств для управления этим списком:
Изменять владельца компонента во время исполнения можно, но без особой необходимости не нужно. Дело в том, что используемый для этого метод RemoveComponent не только вычеркивает компонент из списка, но и обнуляет указатель на него в соответствующем поле владельца. Например, если во время визуального проектирования вы поместили на форму кнопку Button1, а затем во время выполнения изменили ее владельца, то все обращения к ней в программе как к Button1 стали недействительны. Рассмотрим другие свойства компонента. Он может находиться в одном из множества следующих состояний:
Эти состояния используются средой во время визуального проектирования, при загрузке/выгрузке компонентов из файлов ресурсов. Во время исполнения приложения множество состояний пусто. Лишь метод
устанавливает в состоянии компонента флаг csDestroying и вызывает аналогичный метод у всех потомков из списка. Он также используется в деструкторе компонента. Свойство DesignInfo относится к стадии разработки (конструирования) приложения:
В нем хранятся координаты верхнего левого угла компонента во время разработки
Для комментария : kadan@grsu.grodno.by | |||||||||||||||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |