Clipper On Line • Ver Tópico - Auto preenchimento

Auto preenchimento

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Auto preenchimento

Mensagempor wagnerjsc » 01 Abr 2014 09:14

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
wagnerjsc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 12
Data de registro: 24 Jan 2014 08:11
Cidade/Estado: limeira sp
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

Auto preenchimento

Mensagempor Pablo César » 01 Abr 2014 09:32

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().

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
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Auto preenchimento

Mensagempor wagnerjsc » 01 Abr 2014 09:50

Muito obrigado Pablo pela ajuda e atenção!

Abraço,

wagner
wagnerjsc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 12
Data de registro: 24 Jan 2014 08:11
Cidade/Estado: limeira sp
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

Auto preenchimento

Mensagempor Paulao » 08 Abr 2014 16:37

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
Paulao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 183
Data de registro: 09 Jul 2004 11:03
Cidade/Estado: Franca
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Auto preenchimento

Mensagempor Pablo César » 08 Abr 2014 17:04

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)
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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Auto preenchimento

Mensagempor Paulao » 08 Abr 2014 19:13

Boa noite Pablo, obrigado pela força, eu havia feito assim mesmo, mas estou com me embaralhando nos paramentros, veja meu textbox

    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.

*_______________________________________________________________________________
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
Paulao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 183
Data de registro: 09 Jul 2004 11:03
Cidade/Estado: Franca
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Auto preenchimento

Mensagempor Toledo » 08 Abr 2014 19:43

Amigos, segue um pequeno exemplo, reduzindo o número de parâmetros:

#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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Auto preenchimento

Mensagempor Pablo César » 08 Abr 2014 20:07

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.

#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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Auto preenchimento

Mensagempor Toledo » 08 Abr 2014 20:45

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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Auto preenchimento

Mensagempor Pablo César » 08 Abr 2014 22:59

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. Imagem

Quem sabe, sabe. Obrigado Toledo pelos esclarecimentos. :)Pos
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Auto preenchimento

Mensagempor Paulao » 22 Abr 2014 10:10

Obrigado Toledo, era isto mesmo que eu precisava, boa semana pra vc e todos os amigos do forum
Paulao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 183
Data de registro: 09 Jul 2004 11:03
Cidade/Estado: Franca
Curtiu: 0 vez
Mens.Curtidas: 1 vez




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro