Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ActiveDelphi
.: O site do programador Delphi! :.
Autor Mensagem
leo_bruno Enviada: Dom Mai 04, 2014 2:41 am Assunto: {Resolvido} Acertar mascara em dbgrid
Profissional
PessoALL:
Registrado: Sexta-Feira, 16
de Abril de 2010 Acho que não fui muito específico, então estou editando o tópico pra explicar melhor.
Mensagens: 658
De todas as maneiras que tentei fazer, eu acabo setando a mascara para todas as linhas do grid, o que não
serve, pois eu posso ter por exemplo na linha de numero 1, um telefone com 10 digitos e na linha de numero
2 um telefone de 11 digitos e assim por diante.
Eu tentei o evento on draw data cell e on draw column cell, mas nao deu certo.
Alguma dica ?
-----------------------------------------------------------------------------------
Olá pessoALL :
Eu estou tentando criar uma procedure pra acertar as mascaras dos telefones pra mim (5 digitos ou 4digitos).
Criar uma procedure onde passo o campo (de uma query ou clientdataset) como parametro e ela conta os
caracteres.
O problema é que nos testes realizados com o codigo a seguir vem tudo 0.
Código:
interface
uses
Data.DB, Vcl.Dialogs, System.SysUtils, Datasnap.DBClient;
implementation
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 1/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
Código:
Editado pela última vez por leo_bruno em Seg Mai 05, 2014 7:10 pm, num total de 2 vezes
Voltar ao Topo
rique_neves Enviada: Dom Mai 04, 2014 8:52 pm Assunto: Re: procedure para acertar mascara de telefone
Mestre
Código:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if (Length(Edit1.Text) = 1) then
begin
if Edit1.Text[1] = '(' then
Edit1.Text := ''
Registrado: Sexta-Feira, 17
else
de Fevereiro de 2012
begin
Mensagens: 870
Edit1.Text := '('+Edit1.text;
Edit1.SelStart := Length(Edit1.text);
end;
end;
if Length(Edit1.Text) = 3 then
begin
Edit1.Text := Edit1.text+') ';
Edit1.SelStart := Length(Edit1.text);
end;
if Length(Edit1.Text) = 9 then
begin
Edit1.text := Edit1.text+'-';
Edit1.SelStart := Length(Edit1.Text);
end;
end;
veja também:
http://www.showdelphi.com.br/dica/object-pascal/62/funcao-que-aplica-mascara-a-numeros-de-telefone-
delphi
Citação:
{ Aplicando a mascara a números de telefone. }
Result := FoneNumber;
end;
// Exemplo
{ Sem DDD }
ShowMessage(GetTelWithMasc('99999999'));
end;
Voltar ao Topo
leo_bruno Enviada: Dom Mai 04, 2014 10:37 pm Assunto: Re: procedure para acertar mascara de telefone
Profissional
rique_neves escreveu:
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 2/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
Registrado: Sexta-Feira, 16 Código:
de Abril de 2010
Mensagens: 658 procedure TForm1.Edit1Change(Sender: TObject);
begin
if (Length(Edit1.Text) = 1) then
begin
if Edit1.Text[1] = '(' then
Edit1.Text := ''
else
begin
Edit1.Text := '('+Edit1.text;
Edit1.SelStart := Length(Edit1.text);
end;
end;
if Length(Edit1.Text) = 3 then
begin
Edit1.Text := Edit1.text+') ';
Edit1.SelStart := Length(Edit1.text);
end;
if Length(Edit1.Text) = 9 then
begin
Edit1.text := Edit1.text+'-';
Edit1.SelStart := Length(Edit1.Text);
end;
end;
veja também:
http://www.showdelphi.com.br/dica/object-pascal/62/funcao-que-aplica-mascara-a-numeros-de-
telefone-delphi
Citação:
{ Aplicando a mascara a números de telefone. }
Result := FoneNumber;
end;
// Exemplo
{ Sem DDD }
ShowMessage(GetTelWithMasc('99999999'));
end;
Eu quero uma função que se aplique a um Tfield de um dataset, ou seja, quero fazer o tratamento da
mascara direto no dataset que pode ser uma querySql ou mesmo um ClientDatasset. Desta forma, se o
campo onde setei a mascara aparecer em um DbGrid, ou DbEdit, ou qualquer outro componente DataAware,
poderei usar a funcao.
Obrigado !
Voltar ao Topo
rique_neves Enviada: Dom Mai 04, 2014 11:22 pm Assunto: Re: procedure para acertar mascara de telefone
Mestre
certo, si intendi bem . Porque nao utiliza a propriedade EditMask do proprio componente, ai montaria a
mascara para todos os telefones.
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 3/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
So inserir isso na propriedade.
Código:
!\(999\)0000-0000;0;_
Registrado: Sexta-Feira, 17
de Fevereiro de 2012
Mensagens: 870 também não ?
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Voltar ao Topo
leo_bruno Enviada: Dom Mai 04, 2014 11:24 pm Assunto: Re: procedure para acertar mascara de telefone
Profissional
rique_neves escreveu:
Registrado: Sexta-Feira, 16 certo, si intendi bem . Porque nao utiliza a propriedade EditMask do proprio componente, ai montaria a
de Abril de 2010 mascara para todos os telefones.
Mensagens: 658
So inserir isso na propriedade.
Código:
!\(999\)0000-0000;0;_
também não ?
mais ou menos isso, mas o problema não esta na mascara, esta em passar o field como parametro.
quero fazer tipo isso: (sei que a mascara nao esta correta, mas é so exemplo)
if length(field.text) = 10 then field.editmask := (00)0000-00009 else
if length(field.text) = 11 then field.editmask := (00)00000-0000 ;
Posto o resultado.
Voltar ao Topo
rique_neves Enviada: Dom Mai 04, 2014 11:35 pm Assunto: Re: procedure para acertar mascara de telefone
Mestre
Será que o problema nao está por você está colocando os 999 por exemplo que nesse caso o campo fica
como obrigatorio. Em qual evento você está fazendo a parametrizacao?É pra funcionar
Código:
Registrado: Sexta-Feira, 17
!\(###\) ####-####;0;_
de Fevereiro de 2012
Mensagens: 870 //com 11
Código:
!\(###\) #-####-####;0;_
// com 12 - 9 digito celular
Código:
!\(##\) #-####-####;0;_
// sem o 0 do DDD - 9 digitos
Código:
!\(##\) ####-####;0;_
//com 11 sem o 0 do DDD normal
São as possibilidades de telefones. Si voce usar a propriedade dará menos trabalho, mas pra usar pssar por
parametro é sucegado!
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Editado pela última vez por rique_neves em Dom Mai 04, 2014 11:43 pm, num total de 1 vez
Voltar ao Topo
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 4/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
leo_bruno Enviada: Dom Mai 04, 2014 11:42 pm Assunto: Re: procedure para acertar mascara de telefone
Profissional
rique_neves escreveu:
Registrado: Sexta-Feira, 16 eu monta a mascara pra vc com 10 ou 11 caracteres ou mais menos .
de Abril de 2010
Mensagens: 658 Será que o problema nao está por você está colocando os 999 por exemplo que nesse caso o campo fica
como obrigatorio
Esta é a unit:
Código:
unit UprcSetaMascaraTelefone;
interface
uses
Data.DB, System.SysUtils;
implementation
end;
end.
coloco essa procedure no afterscroll da query e se quiser pode por no keypress do dbedit.
Se o valor salvo no banco tiver 11 posicoes ele ira mostrar com 5 digitos no prefixo, se tiver 10 ira mostrar
com 4 digitos no prefixo.
No keypress, keyup ou keydown (ainda nao sei em qual evento vou colocar), como vai estar em branco, ele
ira mostrar apenas os ( ) do DDD e ira obrigar a digitar pelomenos 10 digitos, deixando o 11° a criterio do
usuario.
Este não é o meu problema, como pode ver isso esta resolvido.
Quando é um grid, se na linha de cima o telefone tiver 10 digitos e na atual tiver 11, como eu chamo a
procedure que acerta a mascara no after scroll, todas as linhas ficam com a mascara da linha atual.
Got it ?
Voltar ao Topo
rique_neves Enviada: Dom Mai 04, 2014 11:50 pm Assunto: Re: procedure para acertar mascara de telefone
Mestre
porque nao passa a funcao no onValidate do componente, sendo assim ele vai verificar a informacao e
mascarar! não daria certo?
_________________
Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/
Registrado: Sexta-Feira, 17
de Fevereiro de 2012
Mensagens: 870
Voltar ao Topo
leo_bruno Enviada: Seg Mai 05, 2014 12:47 am Assunto: Re: procedure para acertar mascara de telefone
Profissional
rique_neves escreveu:
Registrado: Sexta-Feira, 16 porque nao passa a funcao no onValidate do componente, sendo assim ele vai verificar a informacao e
de Abril de 2010
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 5/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
Mensagens: 658 mascarar! não daria certo?
Eu editei o enunciado do tópico pois achei que não estava muito claro.
Voltar ao Topo
Bom dia,
Registrado: Sexta-Feira, 7 Experimente utilizar o evento OnGetText do Field mais ou menos como segue:
de Janeiro de 2011
Mensagens: 10850
Código:
var
Mascara: string;
begin
if DisplayText then
begin
case Length(trim(Sender.AsString)) of
10 : Mascara := '\(00\)0000-00009;0;_';
11 : Mascara := '\(00\)00000-0000;0;_';
else Mascara := '\(00\)000000009;0;_';
end;
Text := FormatMaskText(Mascara, Sender.AsString)
end
else
Text := Sender.AsString;
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-terreno
Voltar ao Topo
imex escreveu:
Registrado: Sexta-Feira, 16 Bom dia,
de Abril de 2010
Mensagens: 658 Experimente utilizar o evento OnGetText do Field mais ou menos como segue:
Código:
var
Mascara: string;
begin
if DisplayText then
begin
case Length(trim(Sender.AsString)) of
10 : Mascara := '\(00\)0000-00009;0;_';
11 : Mascara := '\(00\)00000-0000;0;_';
else Mascara := '\(00\)000000009;0;_';
end;
Text := FormatMaskText(Mascara, Sender.AsString)
end
else
Text := Sender.AsString;
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-terreno
Funcionou perfeitamente.
Fiz o seguinte:
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 6/7
23/05/2018 ActiveDelphi :: Exibir tópico - {Resolvido} Acertar mascara em dbgrid
Quando sai do campo, ele ja fica com a mascara correta e todos os telefones no grid ficaram com a mascara
correta.
Anexa a unit.
Código:
unit UprcSetaMascaras;
interface
uses
Data.DB,System.SysUtils,System.MaskUtils;
implementation
Voltar ao Topo
Página 1 de 1
Ir para: Delphi Ir
http://www.activedelphi.com.br/forum/viewtopic.php?t=85933&sid=93abaa6155aadc70a51abe220a6e0ad2 7/7