Instânciar um nº de objetos conhecido apenas em execução

Delphi

03/10/2003

Pessoal, preciso de uma ajuda. Como posso instânciar objetos que só conhecerei o número em tempo de execução quando estiver lendo do arquivo?


Fergos

Fergos

Curtidas 0

Respostas

Sousa_thiago

Sousa_thiago

03/10/2003

Explique melhor.

Que numero que vc não conheçe? o index do objeto? ou a quantidade de objetos?


GOSTEI 0
Fergos

Fergos

03/10/2003

Explique melhor. Que numero que vc não conheçe? o index do objeto? ou a quantidade de objetos?



Thiago eu não conheço o número de objetos até que eu termine a leitura da estrutura que estou recuperando do arquivo. Sendo assim estou com um pequeno problema, pois tenho que declarar as variaveis de um tipo de objeto e não sei quantos eu terei até terminar a leitura da estrutura.

Obrigado por me responder.


GOSTEI 0
Sousa_thiago

Sousa_thiago

03/10/2003

Ainda não entendi sua dúvida ...

Seja mais específico ... de que objeto vc está falando?

Dependendo do objeto vc pode criar um vetor dinamico da classe desse seu objeto e ir criando a medida que for necessário.


GOSTEI 0
Afarias

Afarias

03/10/2003

vc pode usar uma Lista de Objetos (TObjectList) , ex::

-- coloque um Panel cobrindo boa parte do form. no topo do form coloque dois botões e dois edits --

TForm1 = class(TForm)
{...}
private
FObjects: TObjectList;
procedure ClickDosBotoes(Sender: TObject);
{...}
public
{...}
end;

{...}

procedure TForm1.FormCreate(Sender: TObject);
begin
FObjects := TObjectList.Create(True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FObjects.Free;
FObjects := nil;
end;

procedure TForm1.ClickDosBotoes(Sender: TObject);
begin
ShowMessage(´Botão ´+ (Sender as TButton).Name + ´clicado!´);
end;


{ o procedimento abaixo cria a quantidade de objetos
definida no Edit1 -- neste exemplo os objetos são TButton }

procedure TForm1.Button1Click(Sender: TObject);
var
I, NumeroObjetos: Integer;
MeuObjeto: TObject;
begin
FObjects.Clear; // limpa a lista de objetos
NumeroObjetos := StrToIntDef(Edit1.Text, 0);
for I := 1 to NumeroObjetos do
begin
MeuObjeto := TButton.Create(Self); // qualquer objeto q quizer
with (MeuObjeto as TButton) do
begin
Name := ´MeuBotao´ + IntToStr(I);
Top := 30 * I;
Left := 30;
Parent := Panel1;
OnClick := ClickDosBotoes;
end;
FObjects.Add(MeuObjeto);
end;
end;

{ o procedimento abaixo recupera um objeto pelo seu índice
-- indicado no Edit2 -- na lista de objetos e executa seu método Click}

procedure TForm1.Button2Click(Sender: TObject);
var
IndiceObjeto: Integer;
begin
IndiceObjeto := StrToIntDef(Edit2.Text, 0) - 1; // a lista é baseada em 0
with (FObjects.Items[IndiceObjeto] as TButton) do
Click;
end;


T+


GOSTEI 0
POSTAR