GET - Números pela direita
Moderador: Moderadores
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
GET - Números pela direita
Boa tarde Hazael,
Veja se essa parte do meu GetSys te ajuda, está comentado onde fiz as mudanças.
Veja se essa parte do meu GetSys te ajuda, está comentado onde fiz as mudanças.
Código: Selecionar todos
/***
* 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
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
