Fórum quot;Access violationquot; em execução de método em compon #298565

06/10/2005

0

Pessoal,
Estou criando um componente simples, derivado do Tcombobox.
A intenção é criar uma funcionalidade que armazena em outra TString o código do ítem.

Só que dá erro quando executo o método ´adicionar´. Creio que é por que o TStrings ´Fchave1´ não é criado.
´Copiei´ um método ´SetItems´ do Delphi, mas mesmo assim não funciona.

Vejam o código:

----------------------------------------------------------------------------------
unit DTCombobox;

interface

Uses
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

Type
TDCombobox = Class(TCombobox)
Private
FChave1: TStrings;
Protected
procedure SetItems(const Value: TStrings); override;
Public
procedure Adicionar(Chave,Item: String);
procedure LimparCombo;
property Chave1: TStrings read FChave1 write SetItems;
Published
End;

Procedure Register;
implementation

procedure TDCombobox.Adicionar(Chave,Item: String);
Begin
Items.Add(Item);
FChave1.Add(Chave);
End;

procedure TDCombobox.LimparCombo;
Begin
Items.Clear;
FChave1.Clear;
End;

procedure Register;
begin
RegisterComponents(´Standard´, [TDCombobox]);
end;

procedure TDCombobox.SetItems(const Value: TStrings);
begin
if Assigned(FChave1) then
FChave1.Assign(Value)
else
FChave1 := Value;
end;

end.
----------------------------------------------------------------------------

Bico, né?
Mas por que não funciona?
Eu tenho que usar mesmo este método SetItems, Certo?

Obrigado.


Del

Del

Responder

Posts

06/10/2005

Massuda

Tem como fazer seu código funcionar sem alterar seu método SetItems, mas prefiro fazer assim...[list:bd70f56445][*:bd70f56445]Declare FChave1 como sendo uma TStringList ao invés de TStrings[*:bd70f56445]No construtor do seu componente, crie a lista de strings FChave1[*:bd70f56445]No destrutor do seu componete, destrua a lista FChave1[/list:u:bd70f56445]


Responder

Gostei + 0

06/10/2005

Del

Valeu Massuda!
Você ajudou-me a criar o meu primeiro componente! (apesar de anos de exp. em Delphi)

Eu tentei fazer isto que você sugeriu antes mas dava erro. Agora que me toquei... Eu estava fazendo no constuctor: FChave1.Create...

Valeu. Obrigado.

Pessoal, para quem quiser, vai o código completo do componente.
É simples, mas muito útil.

Abraços!
Del.
-------------------------------------------------------------------------------

unit DTCombobox;

interface

Uses
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

Type
TDCombobox = Class(TCombobox)
Private
FChave1: TStringList;
Protected
Public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Adicionar(Chave,Item: String);
procedure LimparCombo;
property Chave1: TStringList read FChave1;
Published
End;

Procedure Register;
implementation

procedure TDCombobox.Adicionar(Chave,Item: String);
Begin
Items.Add(Item);
FChave1.Add(Chave);
End;

constructor TDCombobox.Create(AOwner: TComponent);
begin
inherited;
FChave1 := TStringList.Create;
end;

destructor TDCombobox.Destroy;
begin
FChave1.Free;
inherited;
end;

procedure TDCombobox.LimparCombo;
Begin
Items.Clear;
FChave1.Clear;
End;

procedure Register;
begin
RegisterComponents(´Standard´, [TDCombobox]);
end;

end.


Responder

Gostei + 0

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

Aceitar