Instânciar um nº de objetos conhecido apenas em execução
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
Curtidas 0
Respostas
Sousa_thiago
03/10/2003
Explique melhor.
Que numero que vc não conheçe? o index do objeto? ou a quantidade de objetos?
Que numero que vc não conheçe? o index do objeto? ou a quantidade de objetos?
GOSTEI 0
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
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.
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
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+
-- 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