Procedure para varredura de campos

18/05/2018

0

Pessoal, boa noite!

Tenho o seguinte procedure para verificação de campos obrigatórios:

procedure CamposObrigatorios;
var
  i: integer;

  begin
    with Screen.ActiveForm do
      begin
        for I := 0 to ComponentCount -1 do
            begin
              if Components[i] is TMaskEdit then
                begin
                    if (TMaskEdit(Components[i]).Tag = 1) and (TMaskEdit(Components[i]).Text = '''''''')then
                      begin
                        Application.MessageBox(''''Campos obrigatórios em branco!'''', ''''Aviso'''', MB_ICONINFORMATION+MB_OK);
                        Abort;
                      end;

                end;
            end;
      end;
  end;


Porém, como formatei o maskedit para data e etc, ele nunca estará realmente em branco no Text.. o que anula o procedure.

Teria alguma outra forma de eu fazer uma varredura completa em todos os campos? Agradeço desde já!
Nomad

Nomad

Responder

Post mais votado

19/05/2018

Fiz algumas alterações testei e funciona como o esperado.

var
  i: integer;

begin
  with Screen.ActiveForm do
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TMaskEdit then
      begin
        // >> Remove a maskara para verificar se está em branco
        TMaskEdit(Components[i]).EditMask := '';
        // if (TMaskEdit(Components[i]).Tag = 1) and (TMaskEdit(Components[i]).Text = '')then
        if (TMaskEdit(Components[i]).Text = '') then
        begin
          // >> Retorna a maskara
          TMaskEdit(Components[i]).EditMask := '!99/99/0000;1;_';
          Application.MessageBox('Campos obrigatórios em branco!', 'Aviso',
            MB_ICONINFORMATION + MB_OK);
            //Foca no campo em branco
          TMaskEdit(Components[i]).SetFocus;
          Abort;
        end;
        // >> Retorna a maskara
        TMaskEdit(Components[i]).EditMask := '!99/99/0000;1;_';

      end;
    end;
  end;
end;

Raimundo Pereira

Raimundo Pereira
Responder

Mais Posts

19/05/2018

Nomad

P2, obrigado.. Deu certo mesmo.

Porém no caso, tenho também outros masks (ex: CPF, RG, CEP)... Como ficaria para no retorno, receber a máscara em cada campo específico?
Responder

20/05/2018

Raimundo Pereira

Opa, bom dia.

Simples, apenas fiz o Backup da mascara antes de retira-la e depois da verificação eu retornei a mesma mais não informei manual e sim informei a variável
qual foi feita o backup.

Veja como fica:
var
  i: integer;
  Mascara_BK:string;
begin
  with Screen.ActiveForm do
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TMaskEdit then
      begin
        //Faz o backup da mascara do campo
         Mascara_BK:=        TMaskEdit(Components[i]).EditMask;//
        // >> Remove a maskara para verificar se está em branco
        TMaskEdit(Components[i]).EditMask := '';

   if (TMaskEdit(Components[i]).Text = '') then
   begin
          // >> Retorna a maskara que foi feito o backup
   TMaskEdit(Components[i]).EditMask := Mascara_BK; //
   Application.MessageBox(pchar('Verifique o campo '+TMaskEdit(Components[i]).Name+', o mesmo é obrigatório e deve está preenchido corretamente!'), 'Aviso',
   MB_ICONINFORMATION + MB_OK);
            //Foca no campo em branco
          TMaskEdit(Components[i]).SetFocus;
          Abort;
        end;
        // >> Retorna a maskara
        TMaskEdit(Components[i]).EditMask := Mascara_BK;

      end;
    end;
  end;
end;
Responder

20/05/2018

Nomad

P2, muito obrigado mesmo! Agora está rodando de acordo.

Eu havia tentando armazenar em uma variável, mas provavelmente apliquei a lógica de forma errada.

Obrigado pela ajuda!
Responder

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

Aceitar