StringList em um componente (Erro Access Violation)
Galera,
Estou desenvolvendo um componente e ele precisa ter uma propriedade Values: TStringList, publicada no Object Inspector. Estou criando assim:
TNovaClasse = class(TComponent)
private
FValues: TStringList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Values: TStringList read FValues write FValues;
implementation
constructor Create(AOwner: TComponent); override;
begin
FValues := TStringList.Create;
end;
destructor Destroy; override;
begin
FValues.Free;
end;
Ou seja, até onde sei, estou instanciando corretamente. Só que, quando vou configurar a lista de strings (abro o String List Editor clicando no botão de reticencias da propriedade, no Object Inspector), da primeira vez tudo ocorre bem, mas quando eu vou abrir novamente, começa a dar Access Violation, e o Delphi fica doidão.
O que estou fazendo de errado?
Grato a todos,
Buosi.
Estou desenvolvendo um componente e ele precisa ter uma propriedade Values: TStringList, publicada no Object Inspector. Estou criando assim:
TNovaClasse = class(TComponent)
private
FValues: TStringList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Values: TStringList read FValues write FValues;
implementation
constructor Create(AOwner: TComponent); override;
begin
FValues := TStringList.Create;
end;
destructor Destroy; override;
begin
FValues.Free;
end;
Ou seja, até onde sei, estou instanciando corretamente. Só que, quando vou configurar a lista de strings (abro o String List Editor clicando no botão de reticencias da propriedade, no Object Inspector), da primeira vez tudo ocorre bem, mas quando eu vou abrir novamente, começa a dar Access Violation, e o Delphi fica doidão.
O que estou fazendo de errado?
Grato a todos,
Buosi.
Buosinet
Curtidas 0
Respostas
Beppe
15/02/2005
Ao adicionar uma propriedade, do tipo Objeto, e que você deseja ter o ´ownership´, você precisa de um método set.
private procedure SetValues(const NewValue: TStringList); ... published property Values: TStringList read FValues write SetValues; procedure TNovaClasse.SetValues(const NewValue: TStringList); begin if FValues <> NewValue then FValues.Assign(NewValue); end;
GOSTEI 0
Buosinet
15/02/2005
Funcionou!!!
Muito obrigado pela força.
Buosi.
Muito obrigado pela força.
Buosi.
GOSTEI 0