![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени. Не могу понять что не так.
Код:
unit UDocOper;
interface
uses
messages,dialogs,SysUtils, adodb,db, windows, forms,Classes, Controls, cxControls, cxPC;
type
TopParametr = class (TCollectionItem)
private
FDate: TDateTime;
FCaption: string;
FImageIndex: Integer;
procedure SetCaption(const Value: string);
published
property Caption: string read FCaption write SetCaption;
end;
// --------------- тип операции документа (новый, редактирование) -----------
Type
TTypeOperation=class (TPersistent)
private
FProcedureName:String;
FParametrs:TCollection;
Procedure SetParametrs(const Value: TCollection);
public
destructor Destroy; override;
constructor Create(AOwner: TComponent);
published
property ProcedureName:string read FProcedureName write FProcedureName;
property Parametrs:TCollection read FParametrs write FParametrs;
end;
//--------------------- форма документа ---------------------------------------
type
TDocumentOperation = class(TComponent)
private
FopInsert:TTypeOperation;
Procedure Setpoperation(value:TTypeOperation);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property opInsert:TTypeOperation read FopInsert write Setpoperation;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('CxDataControls', [TDocumentOperation]);
end;
{ TTypeOperations }
procedure TopParametr.SetCaption(const Value: string);
begin
FCaption := Value;
end;
////////////////////////////////////////////////////////////////////////////////
constructor TTypeOperation.Create(AOwner: TComponent);
begin
FParametrs:=TOwnedCollection.Create(Self, TopParametr);
end;
destructor TTypeOperation.Destroy;
begin
inherited;
FreeAndNil(FParametrs);
end;
procedure TTypeOperation.SetParametrs(const Value: TCollection);
begin
FParametrs.Assign(Value);
end;
{ TDocumentOperations }
constructor TDocumentOperation.Create(AOwner: TComponent);
begin
inherited;
FopInsert:=TTypeOperation.Create(self);
end;
destructor TDocumentOperation.Destroy;
begin
inherited;
FreeAndNil(FopInsert);
end;
procedure TDocumentOperation.Setpoperation(value: TTypeOperation);
begin
FopInsert:=value;
end;
end.В итоге при инсталляции компонента у свойства Parametrs не отображается редактор |
|
#2
|
||||
|
||||
|
Цитата:
p.s. Можешь поизучать как работает редактор коллекций (TCollectionEditor). Его исходники находятся в "\Source\Property Editors\ColnEdit.pas" |
|
#3
|
||||
|
||||
|
Код:
unit Unit2;
interface
uses
Classes;
type
TMyCollectionItem = class(TCollectionItem)
private
FId: Integer;
FName: String;
public
constructor Create(Collection: TCollection); override;
published
property Id: Integer read FId write FId;
property Name: String read FName write FName;
end;
TMyComponent = class(TComponent)
private
FMyCollection: TOwnedCollection;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property MyCollection: TOwnedCollection read FMyCollection write FMyCollection;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('My', [TMyComponent]);
end;
{ TMyCollectionItem }
constructor TMyCollectionItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FId:=0;
FName:='';
end;
{ TMyComponent }
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMyCollection:=TOwnedCollection.Create(Self, TMyCollectionItem);
end;
destructor TMyComponent.Destroy;
begin
FMyCollection.Free;
inherited Destroy;
end;
end.но лучше так не делать - не удобно работать с такой коллекцией. правильней создать свой класс коллекцию, унаследовавшись от TOwnedCollection или TCollection (реализовав GetOwner). задать свой тип у Items, Add, Insert и т.д. |
|
#4
|
||||
|
||||
|
Цитата:
ТС нужна более хитрая конструкция: когда у компонента имеется объектное свойство и уже у этого объектного свойства есть свойство-коллекция. |