Jump to content
Natália Oliveira

[Resolvido] Mascara de dados

Recommended Posts

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

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Natália Oliveira

Não percebi bem onde precisas por as mascaras.

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

exato!!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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);

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Edited by thoga31
  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other 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

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!* Edited by Natália Oliveira

Share this post


Link to post
Share on other 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.

Edited by 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.

Share this post


Link to post
Share on other 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..

Edited by Natália Oliveira

Share this post


Link to post
Share on other 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;

Edited by 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Edited by thoga31
Formatação do post

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
armizimm

Faz assim.:

uses MaskUtils;

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

Edited by thoga31
GeSHi
  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.