ok... entendi... vai uma funcao q faz isso
function Tel(Mascara : String) : String;
var
h : String;
begin
H := Retira(Mascara);
Case Length(H) of
7,8 : insert('-',H,Length(h) - 3);
9,10 : begin
insert('-',H,Length(h) - 3);
insert('(',H,1);
insert(')',H,4);
Insert(' ',H,5);
end;
end;
Result := h;
end;
Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu:
Se vc ñ percebeu, eu defino a máscara de formatação de forma dinâmica de acordo
com o tamanho da string do telefone a ser formatado. Outro detalhe é que eu não
uso funções para 'recortar' strings, como a função Copy() ou a função MidStr()
da unit StrUtils (para os que usam Delphi 6 ou 7). Usando FormatMastText(), eu
me isento de ter que ficar reinventando a roda, pois se já existem funções pra
tratar o texto com máscara, não preciso ficar fazendo ginástica recortando
strings. E ainda, faço uso eficiente de uma função quase desconhecida de todos
- StrToInt64Def() - para verificar se uma string realmente representa um
número. Eficiência e código limpo.
EM TEMPO: abaixo uma atualização do trecho de código do exemplo que implementa
as funções de formatação de telefones, CPFs e CNPJs.
--[INÍCIO ATUALIZAÇÃO]--
const
SinalMais = '+';
AbreParenteses = '(';
FechaParenteses = ')';
HifenTraco = '-';
SinalPonto = '.';
{$WRITEABLECONST ON}
PhoneTokens : array[0..4] of string =
(SinalMais, AbreParenteses, FechaParenteses, HifenTraco, SinalPonto);
MascaraTelefone : string = '0000\-0000;0;_';
MascaraTelefoneDDD : string = '\(00\)0000-0000;0;_';
MascaraTelefoneIntl : string = '\+00\-00\-0000\-0000;0;_';
MascaraCPF : string = '000\.000\.000\-00;0;_';
MascaraCNPJ : string = '00\.000\.000\/0000\-00;0;_';
{$WRITEABLECONST OFF}
TelefoneNulo = '999999999999';
CPFNulo = '99999999999';
CNPJNulo = '99999999999999';
{===================== FORMATAÇÃO DE TELEFONES ==============================}
function DesformataTelefone(const s: string): string;
var
i: byte;
begin
// Inicializa resultado
Result := s;
// Retira todos os tokens mais usados em telefones
for i := Low(PhoneTokens) to High(PhoneTokens) do
Result := StringReplace(Result, PhoneTokens[i], EmptyStr, [rfReplaceAll]);
// Se telefone não tem somente números, retorna telefone nulo
if StrToInt64Def(Result, -1) = -1 then
Result := TelefoneNulo;
end;
function FormataTelefone(const s: string): string;
begin
Result := DesformataTelefone(s);
if Length(Result)> 10 then
Result := FormatMaskText(MascaraTelefoneIntl, s)
else if Length(Result)> 8 then
Result := FormatMaskText(MascaraTelefoneDDD, s)
else if Length(Result) = 8 then
Result := FormatMaskText(MascaraTelefone, s);
end;
{===================== FORMATAÇÃO DE CPFs e CNPJs ===========================}
function DesformataCPF(UmCPF: string): string;
begin
Result := UmCPF;
Result := StringReplace(Result, '.', EmptyStr, [rfReplaceAll]);
Result := StringReplace(Result, '-', EmptyStr, [rfReplaceAll]);
if StrToInt64Def(Result, -1) = -1 then
Result := CPFNulo;
end;
function DesformataCNPJ(UmCNPJ: string): string;
begin
Result := DesformataCPF(UmCNPJ);
Result := StringReplace(Result, '/', EmptyStr, [rfReplaceAll]);
if StrToInt64Def(Result, -1) = -1 then
Result := CNPJNulo;
end;
function FormataCPF(UmCPF: string): string;
begin
if (Length(UmCPF) = 11) and (not (StrToInt64Def(UmCPF, -1) = -1)) then
Result := FormatMaskText(MascaraCPF, DesformataCPF(UmCPF))
end;
function FormataCNPJ(UmCNPJ: string): string;
begin
if (Length(UmCNPJ) = 14) and (not (StrToInt64Def(UmCNPJ, -1) = -1)) then
Result := FormatMaskText(MascaraCNPJ, DesformataCNPJ(UmCNPJ))
end;
--[FINAL ATUALIZAÇÃO]--
Sds.
________________________________
To: [email protected]
From: [EMAIL PROTECTED]
Date: Mon, 25 Feb 2008 12:15:59 -0300
Subject: RE: RES: [delphi-br] [DICA] Formatação de telefones, CPF e CNPJ
entendi ....mas pelo visto o cara quer so uma coisa simples... tenho mascaras
de telefone mais inteligentes se for o caso uso essas
Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu:
Não consigo ver generalização em formatação de valores. Sua sugestão é válida,
mas ainda assim sou mais as minhas dicas!
Sds.
________________________________
To: [email protected]
From: [EMAIL PROTECTED]
Date: Mon, 25 Feb 2008 12:06:44 -0300
Subject: RE: RES: [delphi-br] [DICA] Formatação de telefones, CPF e CNPJ
cara eu criei uma simples e generica...geralmente gosto de coisa generica q
serve pra qualquer coisa ae criei uma funcao chamada mascara:
function Mascara(Valor,Mascara : String) : String;
var
p : Byte;
resultado : String[40];
begin
if Valor = '' then
begin
exit;
end;
for P := 1 to Length(Valor) do
begin
if Valor[P] in [',','.','/','-'] then
delete(Valor,P,1);
end;
for P := 1 to Length(Mascara) do
begin
if Mascara[p] <> '#' then
begin
Valor := Copy(Valor,1,P-1)+ Mascara[p] + Copy(Valor,P, Length(valor));
end
end;
Result := valor;
end;
no evento OnExit de um edit ou qualquer outro coloque assim
//telefone
edit1.text := mascara(edit1.text ,'(##)####-####');
//cpf
edit1.text := mascara(edit1.text,'###.###.###-##');
Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu:
Estou retificando parte do código da dica:
const
SinalMais = '+';
AbreParenteses = '(';
FechaParenteses = ')';
HifenTraco = '-';
SinalPonto = '.';
{$WRITEABLECONST ON}
MascaraTelefone : string = '0000\-0000;0;_';
MascaraTelefoneDDD : string = '\(00\)0000-0000;0;_';
MascaraTelefoneIntl : string = '\+00\-00\-0000\-0000;0;_';
MascaraCPF : string = '000\.000\.000\-00;0;_';
MascaraCNPJ : string = '00\.000\.000\/0000\-00;0;_';
{$WRITEABLECONST OFF}
TelefoneNulo = '999999999999';
CPFNulo = '99999999999';
CNPJNulo = '99999999999999';
{===================== FORMATAÇÃO DE TELEFONES ==============================}
function DesformataTelefone(const s: string): string;
begin
// Inicializa resultado
Result := s;
// Retira todos os tokens mais usados em telefones
Result := StringReplace(Result, SinalMais, EmptyStr, [rfReplaceAll]);
Result := StringReplace(Result, SinalPonto, EmptyStr, [rfReplaceAll]);
Result := StringReplace(Result, AbreParenteses, EmptyStr, [rfReplaceAll]);
Result := StringReplace(Result, FechaParenteses, EmptyStr, [rfReplaceAll]);
Result := StringReplace(Result, HifenTraco, EmptyStr, [rfReplaceAll]);
// Se telefone não tem somente números, retorna telefone nulo
if StrToIntDef(Result, -1) = -1 then
Result := TelefoneNulo;
end;
function FormataTelefone(const s: string): string;
begin
Result := DesformataTelefone(s);
if Length(Result)> 10 then
Result := FormatMaskText(MascaraTelefoneIntl, s)
else if Length(Result)> 8 then
Result := FormatMaskText(MascaraTelefoneDDD, s)
else if Length(Result) = 8 then
Result := FormatMaskText(MascaraTelefone, s);
end;
________________________________
To: [email protected]
From: [EMAIL PROTECTED]
Date: Sat, 23 Feb 2008 21:48:44 -0300
Subject: RES: [delphi-br] [DICA] Formatação de telefones, CPF e CNPJ
Prezado Rubem,
Vamos combinar: Cri-Cri somos eu e você, o Cara aí é chato demais e bota
chato nisso. Sem querer ofender Sr. João Morais....hehehehe.
Um grande abraço e parabéns por ter postado AQUI essa dica que vai ser de
grande utilidade para muitos de nós.
João Carlos
De: [email protected] [mailto:[EMAIL PROTECTED] Em
nome de Joao Morais
Enviada em: sábado, 23 de fevereiro de 2008 18:24
Para: [email protected]
Assunto: Re: [delphi-br] [DICA] Formatação de telefones, CPF e CNPJ
Rubem Nascimento da Rocha wrote:
>
> Confesso que na pressa na digitação do código, eu cometi uma tremenda
gafe,
> mas o que importa é que o código é eficiente e funciona! E tb espero que
vc
> tenha chegado a essa conclusão.
Exatamente.
> Se não chegou, é sinal de que tenho um desafeto!
Capaz. Não crio esse tipo de coisa, não me leva a lugar algum.
Agora, se aceitas um comentário, acho que as dicas ficariam bem em um
site. Enquanto aqui elas têm grande visibilidade, porém momentânea, ao
serem publicadas elas seriam indexadas e seriam encontradas para sempre.
Opinião pessoal.
> 2) Encontrei alguém mais cri-cri do que eu!
Concordo em parte.
--
Joao Morais
> ________________________________
>
> To: [email protected]
> From: [EMAIL PROTECTED]
> Date: Sat, 23 Feb 2008 15:59:39 -0300
> Subject: Re: [delphi-br] [DICA] Formatação de telefones, CPF e CNPJ
>
> Rubem Nascimento da Rocha wrote:
>> AbreAspas = '(';
>> FechaAspas = ')';
>
> Abre o quê?
>
> --
> Joao Morais
>
[As partes desta mensagem que não continham texto foram removidas]
__________________________________________________________
Veja mapas e encontre as melhores rotas para fugir do trânsito com o Live
Search Maps!
http://www.livemaps.com.br/index.aspx?tr=true
---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
[As partes desta mensagem que não continham texto foram removidas]
__________________________________________________________
Confira vídeos com notícias do NY Times, gols direto do Lance, videocassetadas
e muito mais no MSN Video!
http://video.msn.com/?mkt=pt-br
---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
[As partes desta mensagem que não continham texto foram removidas]
__________________________________________________________
Veja mapas e encontre as melhores rotas para fugir do trânsito com o Live
Search Maps!
http://www.livemaps.com.br/index.aspx?tr=true
---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
[As partes desta mensagem que não continham texto foram removidas]