.
Monday 21st of May 2012    

Информация

Счетчики

Голосование

Лучшая марка телефона
 

Реклама

фильмы онлайн

фильмы онлайн


конструктор
загрузка...

Для создания новых объектов используйте конструктор:

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).


загрузка...
 

Самое популярное:

bottom

карта сайта