Criação de Componentes

Delphi

09/12/2004

: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?


Mitsalito

Mitsalito

Curtidas 0

Respostas

Dopi

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

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

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;


GOSTEI 0
Dopi

Dopi

09/12/2004

Vc tb precisa fazer um override do Constructor do Componente (TX)

{ 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

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


GOSTEI 0
Mitsalito

Mitsalito

09/12/2004

:oops: desculpa cara eu esqueci de colocar override na frente da procedure


GOSTEI 0
Mitsalito

Mitsalito

09/12/2004

Desculpa de novo e muito obrigado pela ajuda está pronto já


GOSTEI 0
Dopi

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...


type TY = Class A1: String; A2: TEdit; A3: TAlgumacoisa end;


Nesse caso modifique:
TY = Class
para
TY = Class( TComponent )


GOSTEI 0
POSTAR