Fórum StringList em um componente (Erro Access Violation) #268550
15/02/2005
0
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
Curtir tópico
+ 0
Responder
Posts
15/02/2005
Beppe
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;
Responder
Gostei + 0
15/02/2005
Buosinet
Funcionou!!!
Muito obrigado pela força.
Buosi.
Muito obrigado pela força.
Buosi.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)