Следующий пример объявляет класс TMyClassProp, который содержит несколько полей, включая поле перечисляемого типа.
Примечания:
- PropertyObject - должен иметь тип TPersistant или потомка класса TPersistant.
- Нужно создать событие этого TMyClassProp в Create компонента.
unit SubClass;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs;
type
{ Сначала Создадим перечислимый список элементов
затем создадим и установим эти элементы }
TEnumList = (Mom, Dad, Sibling, Sister, Brother);
TEnum = set of TEnumList;
{ Есть Class Object, которое мы хотим использовать как
свойство нашего Component.
Он имеет 4 свойства, Boolean, Word, String и перечислимый
тип. }
TMyClassProp = class(TPersistent)
FBool: Boolean;
FWord: Word;
FString: String;
FEnum: TEnum;
published
property HaveCar: Boolean read FBool Write FBool;
property Age: Word read FWord write FWord;
property Name: String read FString write FString;
property Relation: TEnum read FEnum write FEnum;
end; // TMyClassProp
{ Теперь создадим компонент, который будет содержать
свойство типа TMyClassProp.}
TMyComponent = class(TComponent)
FEnum: TEnum; { Перечислимый тип, только для забавы}
FSubClass: TMyClassProp; { Свойство Class, которое мы хотим }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Relation: TEnum read FEnum write FEnum;
property Relative: TMyClassProp read FSubClass write FSubClass;
{ Published declarations }
end;
procedure Register;
implementation
{ Override Create, для создания экземпляра свойства Class.
Это требуется. }
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited;
FSubClass := TMyClassProp.Create;
end;
{ Override Destroy для очистки. }
destructor TMyComponent.Destroy;
begin
FSubClass.Free;
inherited;
end;
procedure Register;
begin
RegisterComponents('Samples', [TMyComponent]);
end;
end.
По материалам http://delphi.3000.com
|