Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > создания компонентов. Вопросы.


Автор: Teleport 2.9.2008, 12:48
Создаю новый компонент. Вот пример кода.
Код

unit OurOpenDialog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TOurOpenDialog = class(TOpenDialog)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
  end;

procedure register;

implementation

procedure register;
begin
  RegisterComponents('Samples', [TOurOpenDialog]);
end;

{ TOurOpenDialog }

constructor TOurOpenDialog.Create(AOwner: TComponent);
begin
  inherited Create(AOwner); {Вызываем
унаследованный конструктор}
  Options := Options + [ofFileMustExist, ofPathMustExist]; 
  {Выполняем необходимые нам действия}
end;
end.



непонятно, что значит в строке  constructor TOurOpenDialog.Create(AOwner: TComponent); слова AOwner: TComponent
Можно объяснить простыми словами. На пальцах, так скажем.

Автор: THandle 2.9.2008, 13:06
Teleport, owner - это компонент, которому принадлежит твой компонент. При уничтожении твоего объекта(компонента), он уничтожит все принадлежащие ему компоненты, и отвечает за загрузку установленных во время проектирования свойств для принадлежащих ему компонентов.(брр... одни компоненты. ну как смог после 4 уроков физики так и написал).

Это так называемый владелец компонента. Свойство Owner есть у всех наследников класса TComponent, является read-only свойством и устанавливается при создании компонента, в конструкторе, что и происходит в твоем коде. AOwner  и есть владелец...

Автор: Teleport 2.9.2008, 13:13
 2 THandle -  т.е. конструктор только так и может выглядить при создании компонентов? Или это в большинстве случаев?
  constructor Create(AOwner: TComponent); override;

Автор: Poseidon 2.9.2008, 13:20
Цитата(Teleport @  2.9.2008,  13:13 Найти цитируемый пост)
т.е. конструктор только так и может выглядить при создании компонентов?
Ну почему же... нет. Ты можешь сам все делать при создании компонента. Прорисовывать, "выбивать" место в памяти. Прописывать реакцию на Win-сообщения. Только вот, оно тебе надо..?

Автор: pseud 2.9.2008, 13:25
а еще можно так:
Код

constructor Create(AOwner: TMyComponent; AParam1: string; AParam2: Integer); reintroduce;

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

Автор: THandle 2.9.2008, 13:29
Может быть любым. Главное не забывать вызывать унаследованный обработчик:

Код

type
  TComp = class (TComponent)
    public
      constructor Create(AOwner : TComponent; Param : integer); reintroduce;
  end;


Код

constructor TComp.Create(AOwner: TComponent; Param: integer);
begin
  inherited Create(AOwner);
  ShowMessage(IntToStr(Param));
end;




Создаем:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  With TComp.Create(nil, 10) do
    Free;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)