Clipper On Line • Ver Tópico - Digitar número da direita para esquerda

Digitar número da direita para esquerda

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Digitar número da direita para esquerda

Mensagempor asimoes » 04 Out 2019 09:03

Pessoal,

Existem algum código exemplo para um campo edit de valor que a digitação seja da direita para esquerda, como existe no clipper?
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 04 Out 2019 09:28

hazael escreveu:Não seria isso que está procurando?


Colega seria usando o edit da hwgui, que não usa o getsys
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 06 Out 2019 11:40

Prezados,

Consegui,

Tive que modificar a classe hedit, muito simples.

â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 06 Out 2019 11:48

O código do meu teste:
#Include "hwgui.ch"

THREAD STATIC Thisform

FUNCTION MAIN()
LOCAL oDlg,  oEdit1, oButtonex1
LOCAL nValor := ""

   INIT DIALOG oDlg ;
               TITLE "Form1" ;
               AT    0, 0 ;
               SIZE 250,117 ;
               NOEXIT ;
               STYLE WS_POPUP + WS_CAPTION + WS_SYSMENU + DS_CENTER
   
   Thisform := oDlg

   @ 012,29 GET       oEdit1 ;
            VAR       nValor ;
            SIZE      150,24 ;
            STYLE     ES_RIGHT ;
            MAXLENGTH 12 ;
            ON CHANGE {|| oEdit1_onChange() }
                 
   @ 132,71 BUTTONEX oButtonex1 ;
            CAPTION  "Sair" ;
            SIZE     98,32 ;
            STYLE    BS_CENTER + WS_TABSTOP ;
            ON CLICK {|| Thisform:Close() }

   ACTIVATE DIALOG oDlg

RETURN oDlg:lresult

STATIC FUNCTION oEdit1_onChange()
LOCAL cValor

   Thisform:oEdit1:lNumInvert := .T.

   cValor := alltrim(Thisform:oEdit1:VarGet())

   cValor := AllTrim(StrTran( cValor, "."))
   
   Thisform:oEdit1:VarPut( Hb_NtoS( Val(cValor) / 100 )  )
           
   Thisform:oEdit1:Refresh()
   
   hwg_Keyb_Event(VK_END)

RETURN .T.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 06 Out 2019 11:57

Na classe HEdit

Adicionei

DATA lNumInvert INIT .F.

No método Refresh()
METHOD Refresh()  CLASS HEdit
LOCAL vari

   IF ::bSetGet != Nil
      vari := Eval( ::bSetGet, , Self )
      IF ! Empty( ::cPicFunc ) .OR. ! Empty( ::cPicMask )
         vari := iif( vari = Nil, "", Vari )
         vari := Transform( vari, ::cPicFunc + iif( Empty( ::cPicFunc ), "", " " ) + ::cPicMask )
      ELSE
         IF ! ::lNumInvert
            vari := iif( ::cType == "D", Dtoc( vari ), iif( ::cType == "N", Str( vari ), ;
            iif( ::cType == "C" .AND. ValType( vari ) == "C", Trim( vari ), "" ) ) )
         ENDIF
      ENDIF
      ::Title := vari
   ENDIF
   hwg_Setdlgitemtext( ::oParent:handle, ::id, ::title )
   IF hwg_Iswindowvisible( ::handle ) .AND.   !Empty( hwg_GetWindowParent( ::handle ) ) //hwg_Ptrtoulong( hwg_Getfocus() ) == hwg_Ptrtoulong( ::handle )
      hwg_Redrawwindow( ::Handle, RDW_NOERASE + RDW_INVALIDATE + RDW_FRAME + RDW_UPDATENOW ) //+ RDW_NOCHILDREN )
   ENDIF

   RETURN Nil


Não utilizei máscara pro número, só ponto decimal que já é da conversão da Hb_NtoS

Obs.: Isso é uma modificação na versão 2.17, então se quiser usar isso tem que falar pro Kressin implementar na versão atual.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 06 Out 2019 14:50

Usando a função PicVal() do J Quintas



STATIC FUNCTION oEdit1_onChange()
LOCAL cValor

   Thisform:oEdit1:lNumInvert := .T.

   cValor := alltrim(Thisform:oEdit1:VarGet())

   cValor := AllTrim(StrTran( cValor, "."))
   
   cValor := AllTrim(StrTran( cValor, ","))
   
   Thisform:oEdit1:VarPut( AllTrim( Transform( Val(cValor) / 100, PicVal( Len(cValor), 2 ) ) ) )
   
   Thisform:oEdit1:Refresh()
   
   hwg_Keyb_Event(VK_END)

RETURN .T.

FUNCTION PicVal( nLen, nDec )
LOCAL cPicture
   nDec     := iif( nDec == NIL, 0, nDec )
   cPicture := "999,999,999,999,999,999"
   cPicture := Transform( val( Replicate( "9", nLen - nDec ) ), cPicture )
   IF nDec > 0
      cPicture := cPicture + "." + Replicate( "9", nDec )
   ENDIF
RETURN cPicture
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Digitar número da direita para esquerda

Mensagempor asimoes » 06 Out 2019 15:15

Usando @E virgula para casa decimal

STATIC FUNCTION oEdit1_onChange()
LOCAL cValor

   Thisform:oEdit1:lNumInvert := .T.

   cValor := alltrim(Thisform:oEdit1:VarGet())

   cValor := AllTrim(StrTran( cValor, "."))
   
   cValor := AllTrim(StrTran( cValor, ","))
   
   cValor := AllTrim( Transform( Val( cValor ) / 100, "@E" + PicVal( Len( cValor ), 2 ) ) )
   
   ThisForm:oStatus1:SetText( cValor )
   
   Thisform:oEdit1:VarPut( cValor )
   
   Thisform:oEdit1:Refresh()
   
   hwg_Keyb_Event(VK_END)

RETURN .T.

â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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