Array
(
)

duvida com loop

Ullrich
   - 22 fev 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?


Michael
   - 22 fev 2006

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 FindComponent, da classe TComponent. Faça a alteração no seu código como mostrado a seguir:

#Código

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


Ullrich
   - 22 fev 2006

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.


Marco Salles
   - 22 fev 2006

pode fazer assim tb

#Código

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;



Ullrich
   - 22 fev 2006

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...