Natália Oliveira Posted September 13, 2013 at 01:09 PM Report #524445 Posted September 13, 2013 at 01:09 PM (edited) 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 September 13, 2013 at 01:21 PM by thoga31 GeSHi
nunopicado Posted September 13, 2013 at 01:12 PM Report #524447 Posted September 13, 2013 at 01:12 PM 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.
Natália Oliveira Posted September 13, 2013 at 01:17 PM Author Report #524448 Posted September 13, 2013 at 01:17 PM Não percebi bem onde precisas por as mascaras. É no input do utilizador (edtPesquisa?) ou onde? exato!!
nunopicado Posted September 13, 2013 at 01:23 PM Report #524451 Posted September 13, 2013 at 01:23 PM 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.
Natália Oliveira Posted September 13, 2013 at 01:24 PM Author Report #524452 Posted September 13, 2013 at 01:24 PM 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!
nunopicado Posted September 13, 2013 at 01:25 PM Report #524454 Posted September 13, 2013 at 01:25 PM 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.
Natália Oliveira Posted September 13, 2013 at 01:31 PM Author Report #524457 Posted September 13, 2013 at 01:31 PM 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);
nunopicado Posted September 13, 2013 at 01:50 PM Report #524464 Posted September 13, 2013 at 01:50 PM 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.
thoga31 Posted September 13, 2013 at 01:58 PM Report #524468 Posted September 13, 2013 at 01:58 PM (edited) 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 September 13, 2013 at 01:58 PM by thoga31 1 Report Knowledge is free!
Natália Oliveira Posted September 13, 2013 at 02:33 PM Author Report #524472 Posted September 13, 2013 at 02:33 PM (edited) 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 September 13, 2013 at 02:36 PM by thoga31 Tags code + GeSHi
nunopicado Posted September 13, 2013 at 02:38 PM Report #524475 Posted September 13, 2013 at 02:38 PM 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.
thoga31 Posted September 13, 2013 at 02:38 PM Report #524476 Posted September 13, 2013 at 02:38 PM OK! então no caso me refiro a comandos! A comandos? Knowledge is free!
Natália Oliveira Posted September 13, 2013 at 02:41 PM Author Report #524479 Posted September 13, 2013 at 02:41 PM (edited) 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 September 13, 2013 at 02:43 PM by Natália Oliveira
nunopicado Posted September 13, 2013 at 02:43 PM Report #524480 Posted September 13, 2013 at 02:43 PM (edited) 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 September 13, 2013 at 02:44 PM 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.
Natália Oliveira Posted September 13, 2013 at 03:27 PM Author Report #524487 Posted September 13, 2013 at 03:27 PM (edited) 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 September 13, 2013 at 03:28 PM by Natália Oliveira
nunopicado Posted September 13, 2013 at 03:41 PM Report #524493 Posted September 13, 2013 at 03:41 PM (edited) 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 September 13, 2013 at 03:43 PM 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.
Natália Oliveira Posted September 13, 2013 at 03:55 PM Author Report #524497 Posted September 13, 2013 at 03:55 PM 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!
Gilson Nunes Posted September 14, 2013 at 12:03 PM Report #524559 Posted September 14, 2013 at 12:03 PM (edited) 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 September 14, 2013 at 02:41 PM by thoga31 Formatação do post
nunopicado Posted September 15, 2013 at 12:25 AM Report #524600 Posted September 15, 2013 at 12:25 AM 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.
armizimm Posted September 15, 2013 at 11:54 AM Report #524619 Posted September 15, 2013 at 11:54 AM (edited) Faz assim.: uses MaskUtils; edtPesquisa.Text := FormatMaskText('000.000.000;0;*',edtPesquisa.Text); Edited September 15, 2013 at 09:51 PM by thoga31 GeSHi 1 Report
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now