Página 1 de 1
Auto preenchimento
Enviado: 01 Abr 2014 09:14
por wagnerjsc
Bom dia amigos!
Alguem conhece uma forma de fazer com que o espaço vazio de uma textbox seja preenchido com zeros.
Por ex: em uma textbox o usuário teria a opção de digitar 6 digitos tipo: 000001
ou digitar apenas 1 e desse enter a textbox preencheria os digitos vazios com zero ficando 00001
Desculpa por pertubarlos com mais essa duvida, más ja agradeço se alguem puder me dar uma dica.
Abraço,
wagner
Auto preenchimento
Enviado: 01 Abr 2014 09:32
por Pablo César
Oi Wagner,
Após a digitação no TextBox, você precisaria acionar uma função que prencha os zeros que você quer. Pode ser através do evento OnLostFocus.
O seu TextBox precisaria ser do tipo Texto para que você consiga dar o efeito de zeros preenchidos, senão os zeros irão desaparecer ao ser exibidos como numéricos. Dai você poderia utilizar a função StrZero().
Código: Selecionar todos
Function PutZeros()
Local cValor:=GetProperty("Form_1","Text_1","Value")
cValor:=StrZero(Val(cValor),6,0)
SetProperty("Form_1","Text_1","Value",cValor)
Return Nil
Auto preenchimento
Enviado: 01 Abr 2014 09:50
por wagnerjsc
Muito obrigado Pablo pela ajuda e atenção!
Abraço,
wagner
Auto preenchimento
Enviado: 08 Abr 2014 16:37
por Paulao
Ola Pablo, boa tarde, interessante esta função, era exatamente o que eu precisava, mas gostaria de tornar-la uma função genérica, que eu pudesse chamar quando necessário, eu passaria os parâmetros e a função completasse o textbox correspondente, fiz alguns teste aqui mas não consegui torna-la genérica, poderia me dar uma força? Obrigado
Auto preenchimento
Enviado: 08 Abr 2014 17:04
por Pablo César
Paulao escreveu:fiz alguns teste aqui mas não consegui torna-la genérica, poderia me dar uma força?
Sim, claro. Eu teria gostado de ter visto o código da sua tentativa.
Então baseemos-nos no meu exemplo postado. Veja quantos dados são variáveis nessa função ? Seriam:
- * Form_1
* Text_1
* Value
* 6 (quantidade de zeros)
Código: Selecionar todos
Function PutZeros ( cForm, cComp, cVal, nTam )
Local cValor:=GetProperty(cForm,cComp,cVal)
cValor:=StrZero(Val(cVal),nTam,0)
SetProperty(cForm,cComp,cVal,cValor)
Return Nil
Daí você vai ter que passar esses 4 parâmetros sempre para que funcione.
Auto preenchimento
Enviado: 08 Abr 2014 19:13
por Paulao
Boa noite Pablo, obrigado pela força, eu havia feito assim mesmo, mas estou com me embaralhando nos paramentros, veja meu textbox
Código: Selecionar todos
DEFINE TEXTBOX oGet_nfre_nfe
ROW 020
COL 150
WIDTH 080
HEIGHT 020
FONTNAME "Tahoma"
FONTSIZE 10
TOOLTIP "Digite o numero da NF-e Referenciada"
VALUE x_nfre_nfe
ON LOSTFOCUS completa("form_fin","oGet_nfre_nfe","value",9)
END TEXTBOX
Agora a função, mudei o nome apenas porque ja estou acostumado.
Código: Selecionar todos
*_______________________________________________________________________________
Function Completa( cForm, cComp, cVal, nTam )
Local cValor:=GetProperty(cForm,cComp,cVal)
cValor:=StrZero(Val(cVal),nTam,0)
SetProperty(cForm,cComp,cVal,cValor)
Return Nil
Ja tirei as aspas ja coloquei, mas mesmo assim ainda não funcionou, do jeito que ta agora ele retorna 9 zeros pro textbox.
Grande abraço
Auto preenchimento
Enviado: 08 Abr 2014 19:43
por Toledo
Amigos, segue um pequeno exemplo, reduzindo o número de parâmetros:
Código: Selecionar todos
#include "minigui.ch"
Function Main()
x_nfre_nfe:=""
SET NAVIGATION EXTENDED
DEFINE WINDOW form_fin ;
AT 0,0 ;
WIDTH 400 HEIGHT 300 ;
TITLE 'STRZero em TextBox' ;
MAIN
DEFINE LABEL Label_1
ROW 20
COL 10
WIDTH 130
VALUE 'NF-e Refer.:'
END LABEL
DEFINE TEXTBOX oGet_nfre_nfe
ROW 020
COL 150
WIDTH 080
HEIGHT 020
FONTNAME "Tahoma"
FONTSIZE 10
TOOLTIP "Digite o numero da NF-e Referenciada"
VALUE x_nfre_nfe
ON LOSTFOCUS completa("oGet_nfre_nfe",9)
END TEXTBOX
DEFINE LABEL Label_2
ROW 50
COL 10
WIDTH 120
VALUE 'Outro campo'
END LABEL
DEFINE TEXTBOX Text_2
ROW 50
COL 150
WIDTH 100
MAXLENGTH 10
TOOLTIP "Outro campo qualquer"
END TEXTBOX
END WINDOW
form_fin.Center
form_fin.Activate
Return Nil
************************************
Function completa(cComp,nTam)
Local cFrmName := ThisWindow.Name
Local cVal := STRZero(Val(GetProperty(cFrmName,cComp,"Value")),nTam)
SetProperty(cFrmName,cComp,"Value",cVal)
Return Nil
Abraços,
Auto preenchimento
Enviado: 08 Abr 2014 20:07
por Pablo César
Bom eu tinha feito o demo, mas vi que o Toledo disponibilizou outro quase com o mesmo conteúdo. A diferença está em que o Toledo utilizou o ThisWindow.Name eliminando a necessidade do parâmetro do cForm e o de cValue, mas esqueceu de colocar no evento OnEnter, pois alguns usuários ainda utilizam essa prática para mudar de campo (vicio do antigo sist. Clipper).
Paulo, analise as funções do Toledo e minha (estas ultimas) e verá onde você errou. Lembre, em GUI são objetos, não são variáveis. O teu erro estava no terceiro parâmetro (no primeiro exemplo que postei). Observe o
SET NAVIGATION EXTENDED pois ele dará o efeito de mudar de campo.
De todas formas disponibilizo o demo que tinha preparado.
Código: Selecionar todos
#include "hmg.ch"
Function Main()
SET NAVIGATION EXTENDED
DEFINE WINDOW Form_1 AT 219 , 253 WIDTH 458 HEIGHT 246 ;
TITLE "Auto prenchimento de zeros" ICON NIL MAIN
DEFINE TEXTBOX Text_1
ROW 50
COL 130
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Completa(ThisWindow.Name,This.Name,This.Value,9)
ONENTER Completa(ThisWindow.Name,This.Name,This.Value,9)
INPUTMASK "999999999"
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE TEXTBOX Text_2
ROW 150
COL 130
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Completa(ThisWindow.Name,This.Name,This.Value,9)
ONENTER Completa(ThisWindow.Name,This.Name,This.Value,9)
INPUTMASK "999999999"
FORMAT Nil
VALUE ""
END TEXTBOX
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil
Function Completa( cForm, cComp, cVal, nTam )
Local cValor:=GetProperty(cForm,cComp,cVal)
cValor:=StrZero(Val(cVal),nTam,0)
SetProperty(cForm,cComp,"Value",cValor)
Return Nil
De fato é bom a diversidade de exemplos, pois cada um tem o seu jeito. Eu preferi manter a lógica inicial para que o aprendizado servisse o bom entendimento. Pois colocando os campos como parâmetro, você consegue entender melhor.
Auto preenchimento
Enviado: 08 Abr 2014 20:45
por Toledo
Pablo César escreveu:mas esqueceu de colocar no evento OnEnter
Bom, na verdade eu não esqueci, só procurei manter o uso dos mesmos controles que está no exemplo do Paulão, assim como ele, usando apenas o
ON LOSTFOCUS.
E também usar a mesma função em
ON ENTER e
ON LOSTFOCUS ocorre um duplicidade no uso da função Controle(). Neste caso, quando se pressionar o ENTER neste TextBox, será executado a função Controle(), e consequentemente também vai sair o foco do textbox, assim será executado novamente a função Controle() por causa do
ON LOSTFOCUS. Bastaria então usar a função Controle() no
ON ENTER ou no
ON LOSTFOCUS.
Eu optaria pelo uso da função no
ON LOSTFOCUS, pois as funções usadas em
ON ENTER só são executadas se o usuário pressionar a tecla ENTER. Se o usuário tiver o costume de pressionar TAB (costume adquirido pelo uso de formulários em páginas da Internet, que só muda de campo pressionando TAB) para mudar de campo, então a função não será executada no
ON ENTER.
Pablo César escreveu:Local cValor:=GetProperty(cForm,cComp,cVal)
Esta linha do seu exemplo pode ser retirada, não tem efeito nenhum.
Abraços,
Auto preenchimento
Enviado: 08 Abr 2014 22:59
por Pablo César
Toledo escreveu:usar a mesma função em ON ENTER e ON LOSTFOCUS ocorre um duplicidade no uso da função
Você está certo, Toledo.
Toledo escreveu:Eu optaria pelo uso da função no ON LOSTFOCUS
Com certeza.
Toledo escreveu:Local cValor:=GetProperty(cForm,cComp,cVal)
Esta linha do seu exemplo pode ser retirada, não tem efeito nenhum.
Você tem razão. Acabou ficando o código de antes.
Quem sabe, sabe. Obrigado Toledo pelos esclarecimentos. :)Pos
Auto preenchimento
Enviado: 22 Abr 2014 10:10
por Paulao
Obrigado Toledo, era isto mesmo que eu precisava, boa semana pra vc e todos os amigos do forum