Fórum agrupar propriedades #356563
03/04/2008
0
Estou criando um componente, o objetivo é agrupar todas as propriedades que eu criar dentro de um subcomponente. Bom eu criei um
um subcomponente ´TGraphicsObject´ e nele um TCollection. Sei que o problema é que ele não entrar na opção create do TGraphicsObject.
Com a opção de TComponente funciona, mas fica meio feio. Se alguém souber como posso solucionar este problema.
O Componente está abaixo e a propriedade que tento entrar é a
Column dentro de teste
uses
SysUtils, Classes, Controls, Grids,Graphics,Types,Mask,Dialogs;
type
TSGColumn = class; // Adicione esta linha
TSGColumnItem = class; // e esta também
TEditAlinha3 = Class(TMaskEdit)
private
fAlinha :TAlignment;
protected
published
property Alinha :TAlignment read fAlinha write fAlinha;
end;
TComponenteText = class(TGraphicsObject)
private
FOwner: TComponent;
FColumns :TSGColumn;
procedure SetColumns(const Value: TSGColumn);
public
constructor Create(AOwner : TComponent);overload;//override;// dynamic;//override;
destructor Destroy;override; //dinamic;//override;
published
property Columns :TSGColumn read fColumns write SetColumns;
end;
TExtendedStringGrid2 = class(TEditAlinha3)
private
FOwner: TComponent;
fTeste:TComponenteText;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
{ Public declarations }
protected
published
{ Published declarations }
property Teste: TComponenteText read fTeste write fTeste;
end;
TSGColumnItem = class(TCollectionItem)
private
FHeader: string;
FTag: integer;
procedure SetHeader(const Value: string);
protected
function GetDisplayName: string; override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Header: string read FHeader write SetHeader;
property Tag: integer read FTag write FTag;
end;
TSGColumn = class(TCollection)
private
FOwner: TComponent;
function GetColumnItem(Index: integer): TSGColumnItem;
procedure SetColumnItem(Index: integer; const Value: TSGColumnItem);
protected
function GetOwner: TPersistent; override;
public
constructor Create(AOwner: TComponent);
function Add: TSGColumnItem;
function Insert(Index: integer): TSGColumnItem;
property Items[Index: integer]: TSGColumnItem read GetColumnItem write SetColumnItem;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Dia02042008´, [TExtendedStringGrid2]);
end;
constructor TExtendedStringGrid2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOwner := AOwner;
fTeste := TComponenteText.create(AOwner);
end;
destructor TExtendedStringGrid2.Destroy;
begin
fTeste.free;
inherited destroy;
end;
procedure TSGColumnItem.Assign(Source: TPersistent);
begin
inherited;
end;
constructor TSGColumnItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;
destructor TSGColumnItem.Destroy;
begin
inherited;
end;
function TSGColumnItem.GetDisplayName: string;
begin
Result := Format(´Column ¬d´, [Index]);
end;
procedure TSGColumnItem.SetHeader(const Value: string);
begin
FHeader := Value;
end;
function TSGColumn.Add: TSGColumnItem;
begin
Result := TSGColumnItem(inherited Add);
end;
constructor TSGColumn.Create(AOwner: TComponent);
begin
inherited Create(TSGColumnItem);
FOwner := AOwner;
end;
function TSGColumn.GetColumnItem(Index: integer): TSGColumnItem;
begin
Result := TSGColumnItem(inherited Items[Index]);
end;
function TSGColumn.GetOwner: TPersistent;
begin
Result := FOwner;
end;
function TSGColumn.Insert(Index: integer): TSGColumnItem;
begin
Result := TSGColumnItem(inherited Insert(Index));
end;
procedure TSGColumn.SetColumnItem(Index: integer;
const Value: TSGColumnItem);
begin
Items[Index].Assign(Value);
end;
constructor TComponenteText.Create(AOwner: TComponent);
begin
//inherited Create(AOwner);
FOwner := AOwner;
Showmessage(´nao entra aqui´); //nao entra
FOwner := AOwner;
FColumns := TSGColumn.Create(AOwner);
end;
destructor TComponenteText.Destroy;
begin
FColumns.free;
inherited destroy;
end;
procedure TComponenteText.SetColumns(const Value: TSGColumn);
begin
FColumns.Assign(Value);
end;
um subcomponente ´TGraphicsObject´ e nele um TCollection. Sei que o problema é que ele não entrar na opção create do TGraphicsObject.
Com a opção de TComponente funciona, mas fica meio feio. Se alguém souber como posso solucionar este problema.
O Componente está abaixo e a propriedade que tento entrar é a
Column dentro de teste
uses
SysUtils, Classes, Controls, Grids,Graphics,Types,Mask,Dialogs;
type
TSGColumn = class; // Adicione esta linha
TSGColumnItem = class; // e esta também
TEditAlinha3 = Class(TMaskEdit)
private
fAlinha :TAlignment;
protected
published
property Alinha :TAlignment read fAlinha write fAlinha;
end;
TComponenteText = class(TGraphicsObject)
private
FOwner: TComponent;
FColumns :TSGColumn;
procedure SetColumns(const Value: TSGColumn);
public
constructor Create(AOwner : TComponent);overload;//override;// dynamic;//override;
destructor Destroy;override; //dinamic;//override;
published
property Columns :TSGColumn read fColumns write SetColumns;
end;
TExtendedStringGrid2 = class(TEditAlinha3)
private
FOwner: TComponent;
fTeste:TComponenteText;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
{ Public declarations }
protected
published
{ Published declarations }
property Teste: TComponenteText read fTeste write fTeste;
end;
TSGColumnItem = class(TCollectionItem)
private
FHeader: string;
FTag: integer;
procedure SetHeader(const Value: string);
protected
function GetDisplayName: string; override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Header: string read FHeader write SetHeader;
property Tag: integer read FTag write FTag;
end;
TSGColumn = class(TCollection)
private
FOwner: TComponent;
function GetColumnItem(Index: integer): TSGColumnItem;
procedure SetColumnItem(Index: integer; const Value: TSGColumnItem);
protected
function GetOwner: TPersistent; override;
public
constructor Create(AOwner: TComponent);
function Add: TSGColumnItem;
function Insert(Index: integer): TSGColumnItem;
property Items[Index: integer]: TSGColumnItem read GetColumnItem write SetColumnItem;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Dia02042008´, [TExtendedStringGrid2]);
end;
constructor TExtendedStringGrid2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOwner := AOwner;
fTeste := TComponenteText.create(AOwner);
end;
destructor TExtendedStringGrid2.Destroy;
begin
fTeste.free;
inherited destroy;
end;
procedure TSGColumnItem.Assign(Source: TPersistent);
begin
inherited;
end;
constructor TSGColumnItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;
destructor TSGColumnItem.Destroy;
begin
inherited;
end;
function TSGColumnItem.GetDisplayName: string;
begin
Result := Format(´Column ¬d´, [Index]);
end;
procedure TSGColumnItem.SetHeader(const Value: string);
begin
FHeader := Value;
end;
function TSGColumn.Add: TSGColumnItem;
begin
Result := TSGColumnItem(inherited Add);
end;
constructor TSGColumn.Create(AOwner: TComponent);
begin
inherited Create(TSGColumnItem);
FOwner := AOwner;
end;
function TSGColumn.GetColumnItem(Index: integer): TSGColumnItem;
begin
Result := TSGColumnItem(inherited Items[Index]);
end;
function TSGColumn.GetOwner: TPersistent;
begin
Result := FOwner;
end;
function TSGColumn.Insert(Index: integer): TSGColumnItem;
begin
Result := TSGColumnItem(inherited Insert(Index));
end;
procedure TSGColumn.SetColumnItem(Index: integer;
const Value: TSGColumnItem);
begin
Items[Index].Assign(Value);
end;
constructor TComponenteText.Create(AOwner: TComponent);
begin
//inherited Create(AOwner);
FOwner := AOwner;
Showmessage(´nao entra aqui´); //nao entra
FOwner := AOwner;
FColumns := TSGColumn.Create(AOwner);
end;
destructor TComponenteText.Destroy;
begin
FColumns.free;
inherited destroy;
end;
procedure TComponenteText.SetColumns(const Value: TSGColumn);
begin
FColumns.Assign(Value);
end;
Acacio
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)