Методы класса TComponent перечислены далее.

procedure BeforeDestruction;
override;

Вызывается автоматически перед разрушением компонента. Этот метод не должен вызываться в приложении.

procedure ChangeName(const NewName: TComponentName);

Изменяет имя компонента на NewName. Вместо обращения к этому методу рекомендуется непосредственно изменять свойство Name.

constructor Create(AOwner: TComponent); virtual;

Создает компонент (распределяет для него память) и заносит его в список Components владельца AOwner.

destructor Destroy;
override;

Разрушает компонент и все компоненты, которыми он владеет. Вместо этого метода рекомендуется вызывать метод Free.

procedure DestroyComponents;

Разрушает все компоненты из списка Components. Обычно непосредственно в программе не вызывается.

procedure Destroying;

Вызывается автоматически при разрушении владельца. Устанавливает флаг csDestroing в свойство ComponentState.

function ExecuteAction(Action: TBasicAction): Boolean;
dynamic;

Инициирует обработку указанного действия.

function FindComponent(const AName: string): TComponent;

Возвращает ссылку на компонент с именем AName, если этот компонент имеется в списке свойства Components.

procedure FreeNotification (AComponent: TComponent);

Требует уведомить компонент AComponent о разрушении данного компонента.

procedure FreeOnRelease;

Внутренний метод, используемый для обслуживания объектов СОМ

function GetChildOwner: TComponent;
dynamic;

Возвращает собственника компонента для его чтения из потока. Обычно непосредственно в программе не вызывается.

function GetChildParent: TComponent;
dynamic;

Возвращает родительский компонент для его чтения из потока. Обычно непосредственно в программе не вызывается.

type TGetChildProc = procedure (Child: TComponent) of object;
procedure GetChildren(Proc: TGetChildProc;
Root: TComponent);
dynamic;

Используется для загрузки из потока или для сохранения в потоке всех подкомпонентов компонента Root.

function GetlDsOfNames(const IID: TGUID;
Names: Pointer;
NameCount, LocalelD: Integer;
DispIDs: Pointer): HResult;
stdcall;

Возвращает набор ссылок DispIDs на интерфейсы IDispatch для указанных в списке Names компонентов.

function GetNamePath: string;
override;

Возвращает имя компонента для Инспектора объектов. Этот метод не предназначен для вызова в программе.

function GetOwner: TPersistent;
override;
Возвращает владельца компонента (его свойство Owner), function GetParentComponent: TComponent;
dynamic;

Возвращает родительский компонент.

function GetTypelnfо(Index, LocalelD: Integer; out Typelnfo): HResult; stdcall

Возвращает информацию о типе объекта.

function GetTypelnfoCount(out Count: Integer): HResult;
stdcall;

Возвращает количество поддерживаемых компонентом интерфейсов объекта.

function HasParent: Boolean;
dynamic;
Возвращает True, если компонент имеет родителя, procedure InsertComponent (AComponent: TComponent);

Делает текущий компонент собственником компонента AComponent.

function Invoke(DispID: Integer;
const IID: TGUID;
LocalelD: Integer;
Flags: Word;
var Params;
VarResult, Exceplnfo, ArgErr: Pointer): HResult;
stdcall;
Стандартный метод доступа к интерфейсам объектов автоматизации, function IsImplementorOf(const I: Ilnterface): Boolean;

Возвращает True, если компонент исполняет интерфейс Ilnterface.

procedure Loaded;
virtual;

Вызывается для загрузки компонента из потока. Этот, защищенный метод не предназначен для непосредственного вызова из программы.

type TOperation = (oplnsert, opRemove);
procedure Notification (AComponent: TComponent;
Operation: TOperation); virtual;

Извещает владельца о том, что он вставлен в список Components метода или удален из него. Этот метод не предназначен для непосредственного вызова из программы.

procedure PaletteCreated;
dynamic;

Вызывается, когда компонент регистрируется в Палитре компонентов.

function ParentToClient(const Point: TPoint;
AParent: TWinControl = nil): TPoint;
Преобразует родительские координаты в дочерние, function Perform(Msg: Cardinal;
WParam, LParam: Longint): Longint;

Посылает сообщение в оконные функции всех дочерних компонентов.

procedure ReadState(Reader: TReader); virtual;

Является частью серии вызовов при чтении компонента из потока или при его записи в поток. Этот метод не предназначен для непосредственного вызова из программы.

function Referencelnterfасе(const I: Ilnterface;
Operation: TOperation): Boolean;

Уведомляет компонент о вставке или удалении объектов, исполняющих интерфейс Ilnterface.

procedure RemoveComponent AComponent: TComponent);

Удаляет компонент AComponent из своего списка Components.

procedure RemoveFreeNotification (AComponent: TComponent);

Удаляет компонент AComponent из списка внешних компонентов, которые он должен извещать о своем уничтожении.

function SafeCallException (ExceptObject: TObject;
ExceptAddr: Pointer): HResult;
override;

Обрабатывает исключение в методах, которые следуют соглашению saf ecall.

procedure SetAncestor(Value: Boolean);

Управляет флагом csAncestor свойства ComponentState.

procedure SetChildOrder(Child: TComponent;
Order: Integer);
dynamic;

Предназначен для перекрытия в дочерних классах и используется при взаимодействии с потоком чтения-записи.

procedure SetDesigning(Value: Boolean;
SetChildren: Boolean=True);
Управляет флагом csDesigning свойства ComponentState. procedure SetDesignlnstance (Value: Boolean);
Управляет флагом csDesignlnstance свойства ComponentState. procedure Setlnline(Value: Boolean);
Управляет флагом cslnline свойства ComponentState. procedure SetName(const NewName: TComponentName); virtual;

Устанавливает значение свойства Name. Этот метод не предназначен для непосредственного вызова из программы.

procedure SetParentComponent (Value: TComponent);
dynamic;

Предназначен для перекрытия в дочерних классах и используется при взаимодействии с потоком чтения-записи.

function UpdateAction(Action: TBasicAction): Boolean;
dynamic;

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

procedure Updated;
dynamic;

Очищает флаг csUpdating свойства ComponentState после обновления компонента.

class procedure UpdateRegistry (Register: Boolean;
const ClassID, ProgID: string); virtual;

Этот метод не предназначен для непосредственного вызова из программы.

procedure Updating;
dynamic;

Устанавливает флаг csUpdating свойства ComponentState после обновления компонента.

procedure ValidateContainer (AComponent: TComponent);
dynamic;

Определяет, может ли служить параметр AComponent контейнером данного компонента.

procedure Validatelnsert (AComponent: TComponent);
dynamic;

Определяет, может ли данный компонент служить контейнером компонента AComponent.

procedure ValidateRename (AComponent: TComponent;
const CurName, NewName: string); virtual;

Проверяет отсутствие конфликта в пространстве имен компонентов и устанавливает в AComponent значение NIL, если конфликт обнаружен.

procedure WriteState(Writer: TWriter); virtual;

Этот метод не предназначен для непосредственного вызова из программы.

Как видно из приведенного списка, подавляющее большинство методов носят исключительно служебный характер и не предназначены для непосредственного вызова из программы. Однако многие из них могут и должны переопределяться в потомках.

Одним из наиболее часто перекрываемых является метод Notification. С его помощью устанавливается взаимосвязь компонентов, служащих полями других компонентов. Пусть, например, форма содержит компонент Label 1, который в своем свойстве FocusedComponent ссылается на компонент Editl (рис. 3.2).

3.2.2. Методы класса TComponent

Рис. 3.2. Взаимосвязь компонентов

Если компонент Editl удалить из формы, эта ссылка станет недействительной и ее потребуется уничтожить. Вот как работают методы SetFocusControl и Notification метки (файл $(DELPHI)\Source\VCL\StdCtrls.pas):

procedure TCustomLabel.SetFocusControl(Value: TWinControl);
begin
FFocusControl := Value;
if Value <>
nil then Value.FreeNotification(Self);
end;
procedure TCustomLabel.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation * opRemove) and (AComponent »
FFocusControl) then FFocusControl := nil;
end;

В методе SetFocusControl проверяется действительность ссылки свойства FocusedControl и вызывается метод FreeNotif ication того компонента, который служит значением этого свойства. В момент разрушения компонента он вызывает метод Notification метки для удаления ссылки.

Другим часто перекрываемым методом является метод Loaded. Этот метод интересен тем, что вызывается до появления компонента на экране и, таким образом, позволяет провести некоторые подготовительные действия без отрисов-ки компонента. Вот как, например, переопределяется этот метод в компоненте TMediaPlayer (файл $(DELPHI)\Source\VCL\MPlayer.pas):

procedure TMediaPlayer.Loaded;
begin
inherited Loaded;
if (not (csDesigning in ComponentState)) and FAutoOpen then Open;
end;

Сначала вызывается перекрытый метод Loaded (это должно стать стандартом для перекрываемых вами методов Loaded, так как гарантирует, что все унаследованные свойства будут нормально инициализированы данными из потока). Затем проверяется, имеем ли мы дело с этапом прогона программы и установлено ли значение True в свойство AutoOpen (поле FAutoOpen). Если это так, то компонент открывает файл носителя информации.

3.2. Класс TComponent || Оглавление || 3.3. Класс TControl


Искусство создания компонентов Delphi



Новости за месяц

  • Октябрь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс