

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| конструктор |
|
Для создания новых объектов используйте конструктор: constructor Create(AOwner: TComponent); Как видите, объявление конструктора у TComponent несколько отличается от объявления конструктора у TObject. Благодаря новому параметру AOwner устанавливается связь компонента с его владельцем. MyButton:=TButton.Create(Form1); За уничтожение компонента ответственен его деструктор: destructor Destroy; override; Если разрушаемый компонент является владельцем других компонентов, то с вызовом деструктора владельца будут уничтожены и все его сателлиты. ®Все объекты, размещенные на форме в период разработки проекта, не нуждаются в явном вызове конструктора и деструктора. За нас эту работу выполнит Delphi. Компоненты, принадлежащие владельцу, хранятся в списке владельца: property Components[Index: Integer]: TComponent; Каждый компонент в списке владельца обладает индивидуальным индексом: property ComponentIndex: Integer; Для того чтобы узнать общее количество компонентов, принадлежащих владельцу, воспользуйтесь свойством: property ComponentCount: Integer; Попробуем на практике. Откройте новый проект. Поместите на форму проекта десяток кнопок (компонент Button из палитры Standard). Затем выберите любую из них и в Инспекторе объектов измените ее имя на btnStart, а свойст- ву tag присвойте 1. Дважды щелкните по btnStart и опишите процедуру On-Click() так, как это предложено в следующем листинге: procedure TForm1.btnStartClick(Sender: TObject); var i : integer; begin for i:= Form1.ComponentCount-1 downto 0 do if (Form1.Components[i] is TButton) and (Form1.Components[i].Tag<>1) then with (Form1.components[i] as TButton) do Visible:=NOT Visible; end; Все просто. Цикл for..downto перебирает список компонентов, владельцем которых выступает форма Form1, и если компонент принадлежит классу TButton и его свойство tag не равно 1, то он становится невидимым. Ряд методов позволяет манипулировать списком компонентов, для которых TControl выступает владельцем. Удаление компонента из списка обеспечивается процедурой: procedure RemoveComponent(AComponent: TComponent); Полная очистка списка: procedure DestroyComponents; Вставка в конец списка нового компонента: procedure InsertComponent(AComponent: TComponent); Поиск компонента-потомка в списке: function FindComponent(const AName: string): TComponent; Роль класса TComponent в период разработки компонента Знания о текущем состоянии компонента пригодятся в процессе создания компонентов - потомков класса TControl (см. главу 16 «Создание компонентов»). Состояние описывается свойством: property ComponentState: TComponentState; С помощью приведенного ниже кода можно проверить, находится ли компонент в стадии разработки: INHERITED Create(aOwner) if (csDesigning in ComponentState)=false then begin {компонент в стадии разработки} end; Также существенную роль в процессе проектирования новых компонентов играют две процедуры: procedure Notification(AComponent: TComponent; Operation: TOperation); virtual; procedure FreeNotification(AComponent: TComponent); Вызов процедур во время выполнения приложения не имеет смысла. Метод Notification() автоматически вызывается IDE Delphi в момент размещения на форме компонента или удаления его с формы. Метод имеет два параметра, первый из которых указывает на компонент, добавляемый или убираемый с формы, а второй содержит код операции: type TOperation = (opInsert {вставка}, opRemove {удаление}); Как правило, при разработке новых компонентов программисты переопределяют поведение этого метода для компонентов, ссылающихся на другие компоненты, расположенные на форме. В качестве примера компонента такого рода можно предложить источник данных TDataSource. Этот элемент управления взаимодействует с набором данных (property DataSet: TDataSet), в качестве которого могут выступать TTable, TQuery и подобные им элементы. Задача метода FreeNotification - уведомить связанный компонент (например, TDataSource и TTable) о факте освобождения занимаемых ресурсов. Следующие два свойства применяются в компонентах, поддерживающих многокомпонентную модель объектов (COM, Component Object Model). |
