Fórum duvida em criação de componente #344384
11/08/2007
0
um exemplo da minha duvida:
porque se crio um componente que cria outros componentes dentro dele quando coloco um componente desse em um form ele cria no form alem do meu componente os componentes que foram criados dentro do meu.
tipo nesse exemplo quando arrasto o componente TExemplo em um form vem junto um ClientDataSet e um DataSource.
qual seria a maneira correta de criar componentes desse tipo ?
unit Exemplo;
interface
uses
SysUtils, Classes, DB, DBClient;
type
TExemplo = class(TComponent)
private
FCDS: TClientDataSet;
FDTS: TDataSource;
FSQL: String;
protected
property CDS: TClientDataSet read FCDS write FCDS;
property DTS: TDataSource read FDTS write FDTS;
public
constructor Create(AOwner: TComponent); override;
published
property SQL: String read FSQL write FSQL;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Standard´, [TExemplo]);
end;
{ TExemplo }
constructor TExemplo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCDS := TClientDataSet.Create(AOwner);
FDTS := TDataSource.Create(AOwner);
end;
end.
porque se crio um componente que cria outros componentes dentro dele quando coloco um componente desse em um form ele cria no form alem do meu componente os componentes que foram criados dentro do meu.
tipo nesse exemplo quando arrasto o componente TExemplo em um form vem junto um ClientDataSet e um DataSource.
qual seria a maneira correta de criar componentes desse tipo ?
Fabiano Góes
Curtir tópico
+ 0
Responder
Posts
13/08/2007
Rodc
Não testei, mas acho que é porque você está falando que o owner dos componentes internos não é o seu componente e sim o owner deste (no caso o Formulário).
Tenta implementar o construtor assim:
Não esqueça de fazer o destrutor da classe para liberar os dois componentes criados.
Tenta implementar o construtor assim:
constructor TExemplo.Create(AOwner: TComponent); begin inherited Create(AOwner); FCDS := TClientDataSet.Create(self); FDTS := TDataSource.Create(self); end;
Não esqueça de fazer o destrutor da classe para liberar os dois componentes criados.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)