Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создания компонентов. Вопросы. 
:(
    Опции темы
Teleport
Дата 2.9.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



Создаю новый компонент. Вот пример кода.
Код

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
Можно объяснить простыми словами. На пальцах, так скажем.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
THandle
Дата 2.9.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



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

Это так называемый владелец компонента. Свойство Owner есть у всех наследников класса TComponent, является read-only свойством и устанавливается при создании компонента, в конструкторе, что и происходит в твоем коде. AOwner  и есть владелец...
PM   Вверх
Teleport
Дата 2.9.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



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


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Poseidon
Дата 2.9.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



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



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
pseud
Дата 2.9.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



а еще можно так:
Код

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

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


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
THandle
Дата 2.9.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



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

Код

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;


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.