ta ok ... entendi o seu ponto de vista... vc tem um jeito de trabalhar, e eu 
tenho o meu, e nós os  nossos egos,  nao importa como vai ser feito, desde q 
seja feito.
  Gostei do seu codigo... gostei mesmo.. trabalho tbem com esses comandos q vc 
passou, mas talvez o nosso amigo quer algo simples, por isso passei pra ele uma 
opcao, nao estou criticando o q vc mandou .... achei interessantissimo, mas vc 
ta achando q estou disputando com vc...  Desculpe se dei essa impressao. 
   
   
   
   
   
   
   
  
humberto sales <[EMAIL PROTECTED]> escreveu:
          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: delphi-br@yahoogrupos.com.br
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: delphi-br@yahoogrupos.com.br
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: delphi-br@yahoogrupos.com.br
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: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Joao Morais
Enviada em: sábado, 23 de fevereiro de 2008 18:24
Para: delphi-br@yahoogrupos.com.br
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: delphi-br@yahoogrupos.com.br
> 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]



                         

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

Responder a