



Oi gente, tudo bem com vocês?
Você já se deparou com o problema de precisar colocar uma máscara em algum
campo de um Dataset, mas também não queria adicionar ele pelo field editor?
Veja como é simples a adição de máscaras por em tempo de execução:
É necessário estar declarado DB na seção uses,
em versões unicode declare Data.DB.
Em Lazarus declare DB.
Exemplo:
1 2 3 4 5 6 7 8 9 10 | procedure TForm1.Button1Click(Sender: TObject); begin // Campos Numéricos TNumericField(QryTeste.FieldByName('VALOR')).DisplayFormat := '###,###,##0.00'; // Campos Texto TStringField(QryTeste.FieldByName('CNPJ')).EditMask := '00\.000\.000\/0000\-00;0;_'; end; |
O segredo aqui foi o uso do Type Cast, para acessar a propriedade e
passar o valor da máscara.
Uma estratégia interessante é colocar estes comandos no AfterOpen da sua Query ou Dataset.
Veja o exemplo:
1 2 3 4 5 6 7 8 9 10 | procedure TForm1.QryTesteAfterOpen(DataSet: TDataSet); begin // Campos Numéricos TNumericField(DataSet.FieldByName('VALOR')).DisplayFormat := '###,###,##0.00'; // Campos Texto TStringField(DataSet.FieldByName('CNPJ')).EditMask := '00\.000\.000\/0000\-00;0;_'; end; |
Só lembrando que o código acima também é válido para Lazarus.
Certo pessoal, espero que tenham gostado.
Dúvidas ou sugestões, deixe nos comentários do post.
Um abraço e até a próxima. Valeu.
Você precisa fazer o login para publicar um comentário.
Mas num formulário que traz os registro do banco de dados automaticamente, como disparar essa procedure?
Oi Marcos, você pode colocar o código no evento no AfterOpen do seu DataSet.
Já aproveitamos a atualizamos o post.
Obrigado por seu feedback.
A máscara para campo de Texto só funciona para a entrada de dados, para exibí-los não funciona… estou usando o lazarus.
O objetivo seria que ao receber os dados (do tipo varchar) vindos do banco de dados fosse aplicada a máscara para CNPJ.
Bom dia. Tenho um cenário onde preciso aplicar a máscara no dbgrid. O CDS e fields tudo em tempo de execução. Como implementar este mascaramento em tempo de execução (runtime) ? Obrigado
Eugenio
Oi Eugenio, você pode colocar no evento AfterOpen do seu ClientDataSet, conforme o seu exemplo acima.