duvida com loop

22/02/2006

0

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

Ullrich

Responder

Posts

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

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar