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)
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 403
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

Re: Digitar número da direita para esquerda

Mensagem por deividdjs »

fiz uma modificação na versao 2.23 b8 .. e criei um estilo ..

Código: Selecionar todos

   @ 18, 51 SAY "Limite de Credito" TRANSPARENT SIZE 140, 21 OF oPage ;
      FONT oFontSmall
	@ 18, 70 GET oGetLimCred VAR n_limcred ;
	   PICTURE MASK1() ;
	   SIZE 160, 24 OF oPage ;
      STYLE ES_RIGHT + ES_NUMINVERT + ES_CLEARTYPE
ES_NUMINVERT --> SIMPLISMENTE COMEÇA A DIGITACAO DA DIREITA PRA ESQUERDA E MANTEM O CONTEUDO DO GET E VC VOLTAR NELE
ES_CLEARTYPE --> LIMPA O CONTEUDO DO GET AO RE-DIGITAR ..

FICOU BEM LEGAL ..
hwgui 2.23 b8.rar
(4.46 MiB) Baixado 2 vezes
SEGUE A VERSAO DO HWGUI SE ALGUEM TIVER INTERESSE DE TESTAR ..

ABRAÇO !
Editado pela última vez por deividdjs em 10 Fev 2026 16:44, em um total de 1 vez.
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8046
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 1 vez

Re: Digitar número da direita para esquerda

Mensagem por Itamar M. Lins Jr. »

Olá!
Provavelmente, será implementdo.
Agora estou sem tempo e meu CPU Linux ainda estou vendo se o rapaz libera, tá enrolando.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 403
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

Re: Digitar número da direita para esquerda

Mensagem por deividdjs »

Legal Itamar .. vou mexer na gtk tbm e envio aqui nas modificacoes ja funcionando ..

Abs
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
Responder