|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не отображается редактор TCollection
Доброго времени. Не могу понять что не так.
Код:
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
|
||||
|
||||
Цитата:
ТС нужна более хитрая конструкция: когда у компонента имеется объектное свойство и уже у этого объектного свойства есть свойство-коллекция. |