Fernando,

Em PHP, as strings funcionam de forma (grosseiramente) semelhante aos 
ponteiros no Delphi. Em PHP você utiliza o operador $ para acessar uma 
variável e a expressão seguinte ao operador $ é resolvida para que a 
variável correta seja acessada.

Em Delphi isso não funciona. Não é possível criar um nome de variável 
ligado à uma estrutura de dados dinamicamente. Todas as ligações são 
feitas para você quando você compila seu código. Mas nem tudo está 
perdido! Você tem mecanismos de acessar um determinado objeto através 
dos diversos recursos da VCL e da linguagem.

Primeiramente, você não precisa da variável global edit. Ela pode ser 
local ao seu código porque, na verdade, você só a está utilizando para 
criar e configurar seus edits:

procedure TForm1.FormCreate(Sender: TObject);
var
   i: Integer;
   edit: TEdit;
begin
   for i := 0 to 5 do
   begin
     edit := Tedit.Create(self);
     edit.Parent := Self;
     edit.Name := 'ed_campo' + inttostr(i);
     edit.Text := 'dinamico' + inttostr(i);
     edit.Top := 25*i;
   end;
end;

Quando você cria seus edits, você utiliza Self como parâmetro. Isso 
significa que o formulário passará a ser responsável pelo ciclo de vida 
do seu objeto a partir dali. Ou seja, o formulário irá destrui-lo quando 
necessário. Enquanto isso, você poderá acessar os seus objetos através 
da lista de componentes do formulário:

   for i := 0 to ComponentCount - 1 do
     if Components[i] is TEdit then
       if Copy(TEdit(Components[i]).Name, 1, 8) = 'ed_campo' then
       begin
// TEdit(Components[i]) é, com certeza, um de seus objetos
       end;

Outra forma de você fazer isso é através de um array de TEdits na sua 
classe:

TForm1 = class(TForm)
private
   FEdits: array[0..5] of TEdit;
...
end;

Aí, seu evento ficaria:

procedure TForm1.FormCreate(Sender: TObject);
var
   i: Integer;
begin
   for i := 0 to 5 do
   begin
     FEdits[i] := TEdit.Create(self);
     FEdits[i].Parent := Self;
     FEdits[i].Name := 'ed_campo' + inttostr(i);
     FEdits[i].Text := 'dinamico' + inttostr(i);
     FEdits[i].Top := 25*i;
   end;
end;

E, em qualquer ponto do seu código, para acessar um de seus edits, você 
já deve estar adivinhando...

   FEdit[i].<campo> := valor;
   FEdit[i].<método>;


Cordialmente,

Demian Lessa
Salvador - Brasil

dba_gomes wrote:
> Quando você puxa um campo edit da palheta e solta no form uma 
> instrução é atribuída a class(TForm) que é Edit1: TEdit; certo!
> Gostaria de criar esse campo edit dinamicamente. Fiz o seguinte só 
> para teste no meu form, na opção FormCreate introduzi o seguinte 
> código: nesse caso declarei a variável edit como global, edit:Tedit;
> 
> procedure TForm1.FormCreate(Sender: TObject);
>   for i:=0 to 5 do
>     begin
>       edit := Tedit.Create(self);
>       edit.Parent := Self;
>       edit.Name := 'ed_campo'+inttostr(i);
>       edit.Text := 'dinamico'+inttostr(i);
>       edit.Top := 25*i;
>     end;
> end;
> 
> ele gerou cinco campos edit's.... ótimo, mais agora não tenho como 
> acessar seu valores,  mesmo atribuindo um nome ao edit o delphi não 
> sabe que ele existe, ou sou eu?
> 
> Nesse caso atribui o valor edit.Text a uma label1.Caption e a 
> resposta foi dinamico5, claro esse foi o último edit criado... e 
> delphi tb não roda, se a instrução fosse label1.caption := 
> ed_campo3.Text para pegar o valor do campo 3, pois a variável não 
> existe.
> 
> Delphi Dinâmico e possível? 
> 
> Pois se eu conseguisse criar ao invés de edit := Tedit.Create(self); 
> por edit+i := Tedit.Create(self); ai sim tava feito. (Eu tb 
> desenvolvo em php por isso estou me sentindo um pouco engessado no 
> delphi).
> 
> Agradeço desde já.
> Fernando Gomes


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a