Dúvida criação componente

Delphi

19/03/2007

Estou criando um componente que cria outro componente do tipo ´TControl´, quando eu crio ele pode ser do tipo TEdit ou do tipo TLabel, quando eu crio do tipo TLabel ele não me da erro,
mas quando crio do tipo TEdit ele me dá um erro na destruição do componente. obs ele cria e mostra corretamente o que tem que mostrar, mas quando fecha o aplicativo ele me dá um erro de acess violation.


if fParametros.TipoComponente = T_Label then
begin
if fLbDados = nil then
fLbDados:= Tlabel.Create(self);
TLabel(fLbDados).parent := self.parent;
TLabel(fLbDados).AutoSize := fParametros.AutoSizeLabel;
wtop := self.top + (self.Height div 3);
TLabel(fLbDados).SetBounds(40,12,100,21);
Tlabel(fLbDados).Font.Style := [fsBold];
TLabel(fLbDados).Transparent := true;
TLabel(fLbDados).Caption := prValor;
end
else
begin
if fLbDados = nil then
fLbDados:= TEdit.Create(self);
TEdit(fLbDados).parent := self.parent;
TEdit(fLbDados).AutoSize := fParametros.AutoSizeLabel;
TEdit(fLbDados).Height := height;
wtop := self.top;
TEdit(fLbDados).SetBounds(40,12,100,21);
TEdit(fLbDados).ReadOnly := true;
TEdit(fLbDados).text := prValor;
end


Acacio

Acacio

Curtidas 0

Respostas

Michelli88

Michelli88

19/03/2007

Bom...

Tente destruir tudo que vc criar na mão no Destroy.

Veja um exemplo:

constructor TNovoComponente.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FCanvas := TCanvas.Create;
end;
//------------------------------------------------------------------------------
destructor TNovoComponente.Destroy;
begin
 inherited Destroy;
 FCanvas.Free;
end;
//------------------------------------------------------------------------------


Boa Sorte!! :roll:


GOSTEI 0
Acacio

Acacio

19/03/2007

Deixa eu explicar melhor:
Bom no componente tenho um outro componente sendo criado do tipo TControl que ora ele é criado do tipo TEdit ora do Tipo TLabel, ele funciona certo ao ser criado, mostra certo o problema é quando fecho o form e ele entra no destroy do componente. Se ele foi criado do tipo TLabel funciona corretamente e não dá erro,mas se for do tipo TEdit ele dá um erro pois a sua propriedade ´parent´ já é nil e quando dou um free nele ele me dá um erro de acess violation.

Obs ele é criado o parent deste componente é o mesmo do componente inicial. Assim fCompAux.parent := self.parent, para poder mostrar este outro componente ao lado do primeiro edit; e não sendo filho dele.


GOSTEI 0
Michelli88

Michelli88

19/03/2007

Humm....

Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)


GOSTEI 0
Michelli88

Michelli88

19/03/2007

Humm....

Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)


GOSTEI 0
POSTAR