Fórum Instânciar um nº de objetos conhecido apenas em execução #186024

03/10/2003

0

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

Responder

Posts

03/10/2003

Sousa_thiago

Explique melhor.

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


Responder

Gostei + 0

03/10/2003

Fergos

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.


Responder

Gostei + 0

03/10/2003

Sousa_thiago

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.


Responder

Gostei + 0

03/10/2003

Afarias

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+


Responder

Gostei + 0

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

Aceitar