GARANTIR DESCONTO

Fórum problemas com laço (For) #346098

15/09/2007

0

caros colegas, em um formulario tenho varios edits como abaixo:

editA1, editA2, editA3....
editB1, editB2, editB3....
editC1, editC2, editC3....

gostaria de fazer um laço para pegar o valor informado pelo usuario em todos os editA

seria algo do tipo:
//vamos supor que tenho 10 edits
for I := 1 to 10 do   
begin
    if editA[I].Text <> ´´ then
    begin    
      Showmessage(editA[I].Text);            
    end;
  end;


porém o código acima nao funciona sob o seguinte erro:
[Pascal Error] uClass3Res.pas(1202): E2003 Undeclared identifier: ´editA´

alguem se habilita a me dar uma mão?
abraços a todos!


Mahdak

Mahdak

Responder

Posts

15/09/2007

Dbergkamps10

ola,

tente assim:
var
 i: integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
 Showmessage(TEdit[I].Text); 
end;

espero ter ajudado....

Att
Dalton


Responder

Gostei + 0

15/09/2007

Raserafim

com este código você pode ter quantos Edit´s quiser e ainda acrescentar mais sem precisar alterar o código.

este código irá eiir o tonteúdo de todos os edits que estão no form:

var
  I: Integer;
begin
  for I := 0 to Self.ControlCount - 1 do
    if (Self.Controls[I] is TEdit) then
      ShowMessage(TEdit(Self.Controls[I]).Text);



este código irá exibir apenas os edits cujo nome comece com Edit :

var
  I: Integer;
begin
  for I := 0 to Self.ControlCount - 1 do
    if (Self.Controls[I] is TEdit) and (pos(´Edit´, Self.Controls[I].Name) > 0)then
      ShowMessage(TEdit(Self.Controls[I]).Text);



Responder

Gostei + 0

15/09/2007

Mahdak

[b:784f9f1cb1]Dalton[/b:784f9f1cb1]
isso nao se aplica ao meu caso, pois essa rotina pega todos os Edit´s do formulário, e eu quero pegar apenas os EditA, como na ideia acima que postei

[b:784f9f1cb1]raserafim[/b:784f9f1cb1]
nao consegui aplicar isso dentro da linha de raciocinio que coloquei no inicio do tópico

desde ja obrigado a todos pela atenção e fico no aguardo...

um abraço!


Responder

Gostei + 0

15/09/2007

Dbergkamps10

ola,

nesse caso, vc pode guardar o valor EditA no tag dos Edits e pegar so texts dele, assim:
var
 i: integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
 if Components[i].Tag = ´EditA´ then
 Showmessage(TEdit[I].Text);
end;


espero ter ajudado

Att

Dalton


Responder

Gostei + 0

15/09/2007

Raserafim

mahdak,

insisto, acho que o código é o segundo que postei

já que vc quer apenas os EditA, basta acrescentar uma letra A ao código.

aí está o código pronto. é só testar

var 
  I: Integer; 
begin 
  for I := 0 to Self.ControlCount - 1 do 
    if (Self.Controls[I] is TEdit) and (pos(´EditA´, Self.Controls[I].Name) > 0)then 
      ShowMessage(TEdit(Self.Controls[I]).Text);



Responder

Gostei + 0

16/09/2007

Mahdak

mahdak,insisto, acho que o código é o segundo que postei


raserafim, consegui adaptar para verificar o que havia no editA , mas agora extendendo ao total da minha necessidade pintou um ultimo problema.

preciso tambem nesse mesmo ´for´ verificar o conteudo do editB, editC e editD. assim em um só ´for´ eu verificaria o conteudo dos edits como por exemplo:

for i:=0 to ComponentCount-1 do
editA[i], editB[i], editC[i], editD[i]

no código abaixo eu tento me expressar melhor:

var
i : integer;
begin
  cdsSol.Open;

  for i:=0 to ComponentCount-1 do
  if (Components[i] is TEdit) and (pos(´edtA´, Components[I].Name) > 0) then
    if TEdit(Components[I]).Text <> ´´ then
    begin
      cdsSol.Insert;

      cdsSolParametro.AsString  := edtB[i].Text; // problema aqui
      cdsSolLimite.AsString     := edtC[i].Text; // problema aqui
      cdsSolResultado.AsString  := TEdit(Components[I]).Text;
      cdsSolLQ.AsString         := edtD[i].Text; // problema aqui

      cdsSol.Post;
      Solubilizado := true;

    end;


fico no aguardo
abração e obrigado pela atenção!!!


Responder

Gostei + 0

16/09/2007

Raserafim

reescrevi o código.

vê se é isso que vc quer:

var 
i : integer; 
begin 
  cdsSol.Open; 

  for i := 1 to 10 do 
  begin 
      cdsSol.Insert; 

      cdsSolParametro.AsString  := TEdit(FindComponent(´EditB´ + inttostr(i))).Text;
      cdsSolLimite.AsString     := TEdit(FindComponent(´EditC´ + inttostr(i))).Text; 
      cdsSolResultado.AsString  := TEdit(FindComponent(´EditA´ + inttostr(i))).Text; 
      cdsSolLQ.AsString         := TEdit(FindComponent(´EditD´ + inttostr(i))).Text;

      cdsSol.Post; 
      Solubilizado := true; 

  end;



Responder

Gostei + 0

16/09/2007

Mahdak

bah brother, valeu, era justamente ai que eu queria chegar

um forte abraço!


Responder

Gostei + 0

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

Aceitar