Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Natália Oliveira

[Resolvido] Mascara de dados

Mensagens Recomendadas

Natália Oliveira

Bom dia pessoal, preciso de uma ajuda,

preciso fazer uma alteração num sistema, q identifica as consultas por um codigo (RA), porém este codigo já esta enorme com 9 digitos, precisoseparar estes 9 digitos em casas de 3 em tres (###.###.###). No banco estao salvos em pontos e nao quero alterar isto, então preciso criar esta mascara em linha de codigo, tanto na consulta, quanto nos grids ...

Alguem sabe como altero?

if dtmFuncoes.RetiraCaracteres(edtPesquisa.Text) <> '' then
                                  begin
                                       // insere o filtro por RA PARAMETRO
                                    !   dtmManAtendimentos.qryConsultaAtendimento.SQL.Add('WHERE ATE.ATENDIMENTO = ' + edtPesquisa.Text  + #13 + var_Filtros);
                                  end;
                            end;

como colocar esta mascara ??

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Não percebi bem onde precisas por as mascaras.

É no input do utilizador (edtPesquisa?) ou onde?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Já experimentaste trocar o edtPesquisa (TEdit??) por um TMaskEdit?

Metes o TMaskEdit e editas a propriedade EditMask ao teu gosto.

Um exemplo será preencher esta propriedade com !990.990.990;1;_

Isto cria-te uma máscara com três grupos numéricos de 3 caracteres cada, sendo que são separados por '.' e os espaços em branco são '_'.

Obriga-te ainda a meter pelo menos um digito em cada grupo.

Se quiseres obrigar a meter mesmo os 9 caracteres, substitui os 9's por 0's.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

O numero hoje (RA) aparece desta forma: 143153702 e eu preciso que fique assim: 143.153.702

Já experimentaste trocar o edtPesquisa (TEdit??) por um TMaskEdit?

Metes o TMaskEdit e editas a propriedade EditMask ao teu gosto.

Um exemplo será preencher esta propriedade com !990.990.990;1;_

Isto cria-te uma máscara com três grupos numéricos de 3 caracteres cada, sendo que são separados por '.' e os espaços em branco são '_'.

Obriga-te ainda a meter pelo menos um digito em cada grupo.

Se quiseres obrigar a meter mesmo os 9 caracteres, substitui os 9's por 0's.

mas nao posso fazer nas propriedades do edit, tenho que fazer em linha de comando!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Linha de comando como?

Não podes substituir o componente?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

Linha de comando como?

Não podes substituir o componente?

Não, como fazemos com o datatime :

 edtDataEntradaInicio.Text := FormatDateTime('dd/mm/yyyy', dtmFuncoes.DataHoraServidor);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Ah, programaticamente.

Mas tu também queres que o utilizador, ao inserir, já lá veja os pontos, não?

Tendo o TMaskEdit podes alterar a propriedade directamente por linha de código:

MaskEdit1.EditMask:='!990.990.990;1;_'; // Meter isto no OnCreate.

Quando o utilizador insere os dados, já lá tem os '.'.

Quando és tu a preencher via base de dados, podes criar uma função que te insira os '.' no meio, caso os guardes sem o separador.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Para evitar futuros "desentendimentos", há que esclarecer uma coisa que muitos programadores, incluindo os mais velhos, continuam a não saber distinguir.

Em programação não há "comandos". Temos um código, código este constituído por instruções. Em Pascal e Delphi, estas instruções podem ser, no geral, procedimentos, funções, estruturas de controlo ou operações.

Portanto, "linha de comandos" é o CMD do Windows ou o Bash do Linux - aqui sim há comandos -, e "linha de código" é uma linha com uma ou mais instruções no código.

Achei importante referir isto, já não é a primeira vez que vejo confusão à conta deste pormenor simples.

Editado por thoga31
  • Voto 1

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

Para evitar futuros "desentendimentos", há que esclarecer uma coisa que muitos programadores, incluindo os mais velhos, continuam a não saber distinguir.

Em programação não há "comandos". Temos um código, código este constituído por instruções. Em Pascal e Delphi, estas instruções podem ser, no geral, procedimentos, funções, estruturas de controlo ou operações.

Portanto, "linha de comandos" é o CMD do Windows ou o Bash do Linux - aqui sim há comandos -, e "linha de código" é uma linha com uma ou mais instruções no código.

Achei importante referir isto, já não é a primeira vez que vejo confusão à conta deste pormenor simples.

OK! então no caso me refiro a comandos!

Ah, programaticamente.

Mas tu também queres que o utilizador, ao inserir, já lá veja os pontos, não?

Tendo o TMaskEdit podes alterar a propriedade directamente por linha de código:

MaskEdit1.EditMask:='!990.990.990;1;_'; // Meter isto no OnCreate.

Quando o utilizador insere os dados, já lá tem os '.'.

Quando és tu a preencher via base de dados, podes criar uma função que te insira os '.' no meio, caso os guardes sem o separador.

sim, quero que ele veja os pontos ao inserir.. vou tentar..

tinha feito algo assim:

if edtTipoAtendimento.Text <> '' then
                                       var_Filtros := var_Filtros + #13 + 'AND ATE.TIPOATENDIMENTO = ' + QuotedStr(edtTipoAtendimento.Text);
                                       edtTipoAtendimento.Text := FormatFloat('###.###.##0.000',edtTipoAtendimento.Text);
                                       edtTipoAtendimento.SelStart := 0;

mais nao deu muito certo

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Isso não te mostra os pontos durante a inserção.

Só o TMaskEdit ou algum derivado para esse efeito.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

Isso não te mostra os pontos durante a inserção.

Só o TMaskEdit ou algum derivado para esse efeito.

Meu problema é que este edit ja foi utilizado diversas vezes no codigo.... Eu tenho que altera-lo para TMaskEdit então?

Não conhece nenhuma maneira de fazer esta alteração somente com o edit? ele não aceita esta propriedade?

A comandos?

codigo!* Editado por Natália Oliveira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

O TEdit por si só não dá.

Seria possível altera-lo de forma a comportar-se como o TMaskEdit, já que ambos descendem do TCustomEdit.

Mas dá mais trabalho do que fazer a alteração do componente.

Também se podia fazer um handler no onchange do TEdit que cuidasse de meter e tirar os pontos. Mas também dá algum trabalho.

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

O TEdit por si só não dá.

Seria possível altera-lo de forma a comportar-se como o TMaskEdit, já que ambos descendem do TCustomEdit.

Mas dá mais trabalho do que fazer a alteração do componente.

Também se podia fazer um handler no onchange do TEdit que cuidasse de meter e tirar os pontos. Mas também dá algum trabalho.

Fiz dessa maneira:

edtPesquisa.Text :=(FormatFloat('!990.990.990;1;_', StrToFloat(edtPesquisa.Text)));

e compilou.. porem qnd seleciono a informação a ser exibida no edit ele dá este erro:

---------------------------

Informação

---------------------------

Ctrl + C para copiar esta mensagem!

'' is not a valid floating point value

---------------------------

OK

---------------------------

o edit tem uma propriedade que se chama editmask onde posso selecionar algumas possibilidades de mascaras, nenhuma se encaixa ao que preciso..

será que se eu colocar o

edtPesquisa.Text := edtPesquisa.Mask((FormatFloat('!990.990.990;1;_', StrToFloat(edtPesquisa.Text)));

algo assim..

Editado por Natália Oliveira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Estás a inventar! :)

A máscara que te dei é para o TMaskEdit, e não para o FormatFloat. Só podia dar erro.

Agora, dizes-me que o edit tem uma chamada EditMask? E tens a certeza que é um TEdit.

Cheira-me que já é um TMaskEdit, e só precisas colocar a máscara certa.

As que ele tem são exemplos. Mete-lhe a que te dei.

De qualquer maneira, isso é só para quando o utilizador escreve no edit.

Quando és tu a atribuir, tens de lhe dar já com os pontos.

Podes para isso usar o FloatToStrF em conjunto com o ThousandsSeparator para definir o separador, ou então mais prático, criar uma função que te insira os pontos:

function MetePontos(RA:String):String;
var
  i:byte;
begin
  i:=Length(RA);
  Result:=RA;
  while i>1 do
      begin
           if i mod 3=1
              then Insert('.',Result,i);
           Dec(i);
      end;
end;

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Natália Oliveira

Estás a inventar! :)

A máscara que te dei é para o TMaskEdit, e não para o FormatFloat. Só podia dar erro.

Agora, dizes-me que o edit tem uma chamada EditMask? E tens a certeza que é um TEdit.

Cheira-me que já é um TMaskEdit, e só precisas colocar a máscara certa.

As que ele tem são exemplos. Mete-lhe a que te dei.

De qualquer maneira, isso é só para quando o utilizador escreve no edit.

Quando és tu a atribuir, tens de lhe dar já com os pontos.

Podes para isso usar o FloatToStrF em conjunto com o ThousandsSeparator para definir o separador, ou então mais prático, criar uma função que te insira os pontos:

function MetePontos(RA:String):String;
var
  i:byte;
begin
  i:=Length(RA);
  Result:=RA;
  while i>1 do
   begin
		if i mod 3=1
		   then Insert('.',Result,i);
		Dec(i);
   end;
end;

Obrigada!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gilson Nunes

Obrigada!

mas é só substituir por maskedit.

e no lugar de:

'!990.990.990;1;_'

só mude para:

'!990.990.990;0;_'

q ai o text já vem sem a mascara.

ou seja, a mascara só vai existir na exibição.

o fato de ser um monte de edits, não justifica, visto q vc iria ter tb q codificar em um monte de lugar.

Editado por thoga31
Formatação do post

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

mas é só substituir por maskedit.

e no lugar de:

'!990.990.990;1;_'

só mude para:

'!990.990.990;0;_'

q ai o text já vem sem a mascara.

ou seja, a mascara só vai existir na exibição.

o fato de ser um monte de edits, não justifica, visto q vc iria ter tb q codificar em um monte de lugar.

Acho que a ideia da Natália é mesmo vir com os pontos...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
armizimm

Faz assim.:

uses MaskUtils;

edtPesquisa.Text := FormatMaskText('000.000.000;0;*',edtPesquisa.Text);

Editado por thoga31
GeSHi
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.