Digitar número da direita para esquerda

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

O código do meu teste:

Código: Selecionar todos

#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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

Na classe HEdit

Adicionei

DATA lNumInvert INIT .F.

No método Refresh()

Código: Selecionar todos

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

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


Código: Selecionar todos

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Digitar número da direita para esquerda

Mensagem por asimoes »

Usando @E virgula para casa decimal

Código: Selecionar todos

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)
Responder