Clipper On Line • Ver Tópico - GET - Números pela direita

GET - Números pela direita

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

GET - Números pela direita

Mensagempor Kapiaba » 03 Out 2019 15:36

Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

GET - Números pela direita

Mensagempor clodoaldomonteiro » 10 Out 2019 12:45

Boa tarde Hazael,

Veja se essa parte do meu GetSys te ajuda, está comentado onde fiz as mudanças.
   /***
   *       GETREADER()
   *       READ Modal padr„o de um GET simples
   */
Static PROC GETREADER(get)
   LOCAL press, pp, Tecl_p, ar_db:=ALIAS(), n_cp, qt_lin_hlp, lihlp, mIniCol, tela_hlp,;
    c_box, t_box, tmp_, vlr_defa:=.f., ncol, nrow

   LOCAL original,; //num sei o que ‚       mcargo,;       //para montar a vari vel da senha
    mmascara := if(get:picture=NIL,'NIL',get:picture),; //mascara do get
    mtamget        // tamanho do get
   PRIV im_aj_at_:=0
   PRIVATE lPrimKey := .T.
   mcargo:=''
   IF TYPE("op_menu")!="N" .OR. op_menu=1 .OR.;    // se op_menu nao existir ou
       op_menu=4 .OR. (TYPE("cex_com_vl")!="U" .AND. op_menu = 5)               // for inclusao ou tela
      get:setfocus()                                  // complementar entao ativa o GET
      tmp_=READVAR()

      IF !EMPT(get:cargo) .AND. EMPT(&tmp_.)          // se o campo esta vazio e pode ter valor inicial
         tmp_=get:cargo
         IF VALTYPE(tmp_)="A" .AND. LEN(tmp_)>2       // se o valor definido no "cargo"
            IF !EMPT(tmp_[3]).AND.EMPT(get:original)  // é o valor inicial
               tmp_=EVAL(&("{||"+tmp_[3]+"}"))        // pega o default
               lihlp=LEN(get:buffer)
               IF get:picture=NIL .OR. AT("@K",get:picture)>0 .OR. AT("@S",get:picture)>0
                  pp="@X"
               ELSE
                  pp=get:picture
               ENDIF
               get:buffer:=LEFT(TRAN(tmp_,pp)+SPAC(lihlp),lihlp)
               get:assign()
               updated:= .T.
               vlr_defa:=.t.
            ENDIF
         ENDIF
      ENDIF

      get:killfocus()                            // desativa o GET
   ENDIF

   IF (GETPREVALIDATE(get))                    // le o GET se condi‡„o WHEN satisfeita
      get:setfocus()                             // ativa o GET para leitura

      IF vlr_defa                                // se teve default, prepara para
         get:clear := .t.                          // apagar se tecla diferente de letra
      ENDIF

      WHILE (get:exitstate==GE_NOEXIT)
         lihlp=0
         IF (get:typeout)
            get:exitstate:= GE_ENTER
         ENDIF
         // clodoaldo
         // Tratamento para entrada Direita -> Esquerda
         IF ( Get:type == "N" )   .And. ( Len( Get:buffer ) > Get:DecPos )
            Get:Pos := Len( Get:buffer ) + 1
            Get:End()
            Get:ToDecPos()
            Get:Left()
         ELSEIF ( Get:type == "N" )
            Get:Pos := Len( Get:buffer ) + 1
            Get:End()
         ENDIF
         // \clodoaldo

         cKey := ''
         nKey := 0
         // Apply keystrokes until exit
         original := Get:buffer
         mtamget  :=len(get:buffer) // tamanho do get
         WHILE (get:exitstate==GE_NOEXIT)           // aplica toques at‚ a sa¡da
            IF im_aj_at_<2
               IF DrvAutoHel .AND. !EMPT(get:cargo)
                  tmp_=get:cargo
                  IF !EMPT(tmp_[1])
                     qt_lin_hlp=CONTA("|",tmp_[1])+1
                     If TYPE('L_I2')=='N'
                        ml_i:=l_i2
                     Else
                        ml_i:=if(TYPE('L_I')=='N', l_i, MaxRow())
                     Endif

                     //Modifiquei para dicas muito grandes
                     IF get:row + qt_lin_hlp + 3 > ml_i .and. !(ReadVar() $ 'DEC_TIPO,DEC_MODO,DEC_TIPPUB,ATO_TIPOAG')
                        IF get:row-qt_lin_hlp-3>=0
                           lihlp=get:row-qt_lin_hlp-2
                        ENDIF
                     ELSE
                        lihlp=get:row+1
                     ENDIF

                     IF lihlp>0
                        mIniCol  :=get:col
                        mTamanho :=TamanhoMsg(tmp_[1])
                        mMaxCol  :=mIniCol+mTamanho+4

                        mc_i:=if(TYPE('C_I')=='N', c_i, MaxCol())
                        if mMaxCol > mc_i
                           mIniCol:= mc_i - mTamanho -5
                           mMaxCol:= mc_i-2
                        ENDIF
                        mName:=get:name
                        mc1&mName:=lihlp-1
                        ml1&mName:=mIniCol-1
                        mc2&mName:=LIHLP+qt_lin_hlp+2
                        ml2&mName:=mMAXCOL+1
                        th_&mName:=SaveScreen(mc1&mName, ml1&mName, mc2&mName, ml2&mName)
                        //@ 19, 60 say mName + ' ' + strzero(len(th_&mName),6)

                        c_box=drvcorbox; t_box=drvtitbox
                         drvcorbox=drvcorhlp; drvtitbox=drvtithlp

                         DBOX(tmp_[1], lihlp, mIniCol, , .f.)

                        drvcorbox=c_box; drvtitbox=t_box
                     ENDIF
                  ENDIF
               ENDIF
               IF im_aj_at_=1
                  DISPEND()                              // apresenta tela de uma vez so
               ENDIF
            ENDIF

            im_aj_at_=3

               tecl_p= Inkey(0)
               novapos=.f.
               IF tecl_p=-100
                  novapos=.t.
                  tecl_p=K_UP
               ENDIF
               nKey := tecl_p
               if AT("@P",mmascara)=0
                  GETAPPLYKEY(get,tecl_p,original)
               ENDIF
               lPrimKey := .F.      // clodoaldo

            //tratamento de campo senha
            If AT("@P",mmascara)>0
               IF     nKey >= 32 .AND. nKey <= 255
                  mcargo := mcargo+chr(nKey)       //monta a saida do get
               ELSEIF nkey = 8
                  mCARGO := SUBSTR(mCARGO, 1, LEN(mCARGO) - 1)
               ELSEIF nKey = 27                    //Sai com Tecla ESC e retorna vazio
                  mCargo := space(mTamget)
               ELSEIF nkey = 5                     //Volta para o get anterior
                  mCARGO := space(mTamget)         //preenche o get com espa‡os
               ENDIF
               GETAPPLYKEY(get, nKey, original)    //aplica a tecla pressionada
            ENDIF

            IF LASTKEY()=K_ALT_F1
               im_aj_at_=1
               DrvAutoHel=!DrvAutoHel
            ELSEIF LASTKEY()=K_F8 .AND. !EMPT(get:cargo)
               tmp_=get:cargo
               mF8:=tmp_[2]
               mGet:=get:buffer

               IF !EMPTY(tmp_[2])
                  nrow:= ROW()
                  ncol:= COL()
                  JOGANOBUFF(" ")
                  Inkey(0)
                  get:assign()
                  AJUSTA_PICT(get)

                  if 'ABREARQUIVO' $ Upper (mF8)
                     WVW_SetClipboard( strtran(strtran(mGet,'.',''),'-','') )
                     //WVW_PasteFromClipboard()
                  endif

                  tmp_=EVAL(&("{||"+tmp_[2]+"}"))          // executa comando especial...
                  If valtype(mF8) <> 'C'
                     mF8 := ''
                  Endif
                  IF !EMPT(tmp_) .and. !('ABREARQUIVO' $ Upper (mF8)) .and. !('VDBF2' $ Upper (mF8))
                     IF get:picture=NIL .OR. AT("@K", get:picture)>0 .OR. AT("@S", get:picture)>0
                        pp="@X"
                     ELSE
                        pp=get:picture
                     ENDIF
                     
                     get:buffer:=PADR(TRAN(tmp_,pp),LEN(get:buffer))
                     get:assign()
                     get:display()
                     updated:= .T.
                     
                     IF !SET(_SET_CONFIRM)
                        get:exitstate:=GE_ENTER
                     ENDIF
                     
                  ENDIF
                  SETPOS(nrow, ncol)
               ENDIF
            ENDIF

            IF get:exitstate!=GE_NOEXIT .OR. im_aj_at_=1
               IF im_aj_at_=1
                  DISPBEGIN()                              // monta tela na pagina de traz
               ENDIF
               IF lihlp>0
                  mName:=get:name
                  RestScreen(mc1&mName, ml1&mName, mc2&mName, ml2&mName, th_&mName)
                  //@ 20, 60 say mName + ' ' + strzero(len(th_&mName),6)
               ENDIF
               IF im_aj_at_=1 .AND. op_menu!=3 .AND. op_menu!=4
                  x="INFOSIS"
                  &x.(.t.)
                  get:display()
               ENDIF
            ENDIF
         END
         IF get:exitstate != GE_UP .AND.;            // se nao esta voltando campo
             get:exitstate != GE_ESCAPE               // e nao pressionou ESC
            AJUSTA_PICT(get)
            IF (!GETPOSTVALIDATE(get))                 // n„o permite sa¡da se condi‡„o
               im_aj_at_=0                               // VALID nao estiver satisfeita
               get:exitstate:= GE_NOEXIT
            ELSE
               IF !EMPT(get:cargo)                       // pode ter formulas?
                  tmp_=get:cargo
                  IF VALTYPE(tmp_)="A" .AND. LEN(tmp_)>3   // se existe a subscricao 4
                     IF !EMPT(tmp_[4])                       // e ela nao esta vazia
                        pp="IMP_FORM"
                        FOR i_=1 TO LEN(tmp_[4])               // mostra todas as formulas
                           &pp.(tmp_[4,i_])                      // requisitadas
                        NEXT
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
         ENDIF

      END

      get:killfocus()                              // desativa o GET
   END
   //tratamento de campo senha senha
   if '@P' $ mmascara
      IF Get:EXITSTATE() <> 7
         Get:VARPUT(mCARGO)
      ENDIF
   ENDIF
   RETURN

At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 6 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