Criação de Componentes
:D Estou criando um componente, nele preciso colocar uma propriedade que é um objeto, nesta propriedade deveria aparecer uma crizinha como temos na propriedade Color=TColor, bem na minha propriedade até aparece a cruzinha, o grande porém e que quando tento espandi-la ou me é exibida a mensagem dizendo que a propriedade não pode ser expandida ou expade, mas não me mostra nada.
:?: alguém sabe como se cria este tipo de propriedade?
:?: alguém sabe como se cria este tipo de propriedade?
Mitsalito
Curtidas 0
Respostas
Dopi
09/12/2004
Vc tem que usar o metodo SetSubComponent(true) desse Subcomponente
Veja no Exemplo abaixo, onde o Componente ACBrCHQ cria uma instancia do SubComponente ACBrDevice
Veja no Exemplo abaixo, onde o Componente ACBrCHQ cria uma instancia do SubComponente ACBrDevice
constructor TACBrCHQ.Create(AOwner: TComponent);
begin
inherited create( AOwner );
fsAtivo := false ;
fsModelo := chqNenhuma ;
{ Instanciando SubComponente TACBrDevice }
fsDevice := TACBrDevice.Create( self ) ; { O dono é o proprio componente }
fsDevice.Name := ´ACBrDevice´ ; { Apenas para aparecer no Object Inspector}
fsDevice.SetSubComponent( true );{ para gravar no DFM/XFM }
fsDevice.Porta := ´COM1´;
fsDevice.Serial.DeadlockTimeout := 1000 ;
GOSTEI 0
Mitsalito
09/12/2004
Cara desculpe minha falta de conhecimento, mas não entendi.
vamos supor
tenho o componente X: TX
neste componete tenho a propriedade Y: TY
onde
type
TY = Class
A1: String;
A2: TEdit;
A3: TAlgumacoisa
end;
Este tipo está declarado em uma outra unit e eu gostaria que ele fosse mostrado no componente x com a cruzinha na frente para se fazer o preenchimento;
vamos supor
tenho o componente X: TX
neste componete tenho a propriedade Y: TY
onde
type
TY = Class
A1: String;
A2: TEdit;
A3: TAlgumacoisa
end;
Este tipo está declarado em uma outra unit e eu gostaria que ele fosse mostrado no componente x com a cruzinha na frente para se fazer o preenchimento;
GOSTEI 0
Dopi
09/12/2004
Vc tb precisa fazer um override do Constructor do Componente (TX)
No Implamentation
{ Componente X }
TX = class( TComponent )
private
fsY : TY ;
public
constructor Create(AOwner: TComponent); override;
published
{ Instancia do Componente Y }
property Y : TY read fsY ;
end;
No Implamentation
constructor TX.Create(AOwner: TComponent);
begin
inherited create( AOwner );
{ Instanciando SubComponente TY }
fsY := TY.Create( self ) ; { O dono é o proprio componente }
fsY.Name := ´ComponenteY´ ;
fsY.SetSubComponent( true ); { para gravar as propriedades do Subcomponente no DFM/XFM }
end ;
GOSTEI 0
Mitsalito
09/12/2004
:oops: Cara tenha um pouco mais de paciencia comigo .... fis o que vc falou mas não funcionou .... no lugar do objeto que foi criado ao invéz da cruzinha ficou uma combobox.
dai coloquei um showmessagem no metodo contructor que estádeclarado direitinho no public e vi que não está sendo feito nada lá dentro.
tá brabo cara
dai coloquei um showmessagem no metodo contructor que estádeclarado direitinho no public e vi que não está sendo feito nada lá dentro.
tá brabo cara
GOSTEI 0
Mitsalito
09/12/2004
:oops: desculpa cara eu esqueci de colocar override na frente da procedure
GOSTEI 0
Mitsalito
09/12/2004
Desculpa de novo e muito obrigado pela ajuda está pronto já
GOSTEI 0
Dopi
09/12/2004
Esqueci de mencionar...
O seu subcomponente deve ser descendente de TComponent... caso contrário ele não será persistente, e não gravará as propriedades...
Nesse caso modifique:
TY = Class
para
TY = Class( TComponent )
O seu subcomponente deve ser descendente de TComponent... caso contrário ele não será persistente, e não gravará as propriedades...
type
TY = Class
A1: String;
A2: TEdit;
A3: TAlgumacoisa
end;
Nesse caso modifique:
TY = Class
para
TY = Class( TComponent )
GOSTEI 0