duvida com loop

22/02/2006

function TestaHora(Valor: String):Boolean;
var
Hora, Minuto : String;
begin
Hora := Valor;
Minuto := Valor;
if Hora = ´ : ´ then
begin
TestaHora := False;
Exit;
end;
Delete(Hora,3,6);
Delete(Minuto,1,3);
if (StrToInt(Hora) > 24) or (StrToInt(Hora) < 1) or
(StrToInt(Minuto) > 60) or (StrToInt(Minuto) < 1) then
TestaHora := False;
end;



Validando 12 campos.
var
Mkedt: String;

// Valida os campos
for I := 1 to 12 do
begin
MkEdt := Concat(´MaskEdit´+IntToStr(I)+´.Text´);
if TestaHora(MkEdt) = False then
begin
Application.MessageBox(´Atenção horário invalido ou vaziu, tente novamente.´,´Atenção!´,MB_OK +MB_ICONINFORMATION);
end;
end;
//fim

Como faço para rodar este Loop???

Desta forma que está ai compila, o problema é que ao inves de mandar
para a função TestaHora o valor do MaskEdit1.text, ele manda uma
string ´MaskEdit1.text´. Alguem tem alguma idéia?


Ullrich

Respostas

22/02/2006

Michael

Olá!

No Delphi vc não pode avaliar expressões string como se fossem códigos da linguagem, como o Clipper permitia atráves do operador de macro-substituição.

Porém, para acessar componentes pelo nome, existe o método [b:a0f3dcb640]FindComponent[/b:a0f3dcb640], da classe [b:a0f3dcb640]TComponent[/b:a0f3dcb640]. Faça a alteração no seu código como mostrado a seguir:

var
MaskEdit: TComponent

// Valida os campos
for I := 1 to 12 do
begin
  MaskEdit := FindComponent(´MaskEdit´ + IntToStr(I));
  if Assigned(MaskEdit) and not TestaHora(TMaskEdit(MaskEdit).Text) then
  begin
    Application.MessageBox(´Atenção horário invalido ou vaziu, tente novamente.´,´Atenção!´,MB_OK +MB_ICONINFORMATION);
  end;
end;


[]´s


Responder Citar

22/02/2006

Ullrich

var
MaskEdit: TComponent

// Valida os campos
for I := 1 to 12 do
begin
MaskEdit := FindComponent(´MaskEdit´ + IntToStr(I));

MaskEdit <-- Recebe ([csInheritable])

if Assigned(MaskEdit) and not TestaHora(TMaskEdit(MaskEdit).Text) then
begin
Application.MessageBox(´Atenção horário invalido ou vaziu, tente novamente.´,´Atenção!´,MB_OK +MB_ICONINFORMATION);
end;
end;

Fiz desta forma, porem quando a variavel MaskEdit deveria receber MaskEdit1 ela recebe este valor ([csInheritable]).

Continuando o Loop ele sempre entra no If, não inportando o valor do MaskEdit.

Como faço para fazer este loop funcionar???

Obrigado pela atenção.


Responder Citar

22/02/2006

Marco Salles

pode fazer assim tb

procedure TForm1.Button2Click(Sender: TObject);
var
Mkedt: String;
i:integer;
begin
for I := 1 to 12 do
  begin
    if Assigned( FindComponent(´MaskEdit´ + IntToStr(I)))  then
      begin
        MKedt := TmaskEdit(FindComponent(´MaskEdit´ + IntToStr(I))).Text;
        if TestaHora(MkEdt) = False then
          begin
            Application.MessageBox(´Atenção horário invalido ou vaziu, tente novamente.´,´Atenção!´,MB_OK +MB_ICONINFORMATION);
          end;
      end;
  end;
end;



Responder Citar

22/02/2006

Ullrich

Valeu Marco Salles, foi batata...

Obrigado a todos pala dedicação as perguntas, não sei o que faria sem vocês para ajudar... Valeu mesmo a todos...


Responder Citar