Fórum Dúvida criação componente #338943

19/03/2007

0

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

Responder

Posts

19/03/2007

Michelli88

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:


Responder

Gostei + 0

20/03/2007

Acacio

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.


Responder

Gostei + 0

21/03/2007

Michelli88

Humm....

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


Responder

Gostei + 0

21/03/2007

Michelli88

Humm....

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar