Dúvida criação componente
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
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
Curtidas 0
Respostas
Michelli88
19/03/2007
Bom...
Tente destruir tudo que vc criar na mão no Destroy.
Veja um exemplo:
Boa Sorte!! :roll:
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
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.
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
19/03/2007
Humm....
Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)
Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)
GOSTEI 0
Michelli88
19/03/2007
Humm....
Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)
Bom, entao verifique se ele foi criado antes de dar um ´.Free´
:)
GOSTEI 0