Estou fazendo testes com HB34+MINGW7.10+HWGUI220, e não estou conseguindo fazer funcionar o teclado numerico do meu pc.
Na rotina abaixo, compilado com XHB110+BCC55+WVT+HWGUI, esta pesquisa funciona perfeitamente, o teclado numérico funciona corretamente, ja na compilação somente com a HWGUI220, o teclado numérico retorna letras a,b,c,d... para cada numero digitado.
Montei esta rotina para faciliTar a mudança da DBEDIT para o Browse, mais estou enroscado no uso do TECLADO NUMERICO.
Minha duvida:
Preciso incluir algo na HWGUI220 para conseguir usar o teclado numérico, uso por padrão o HB_CODEPAGE_PTISO e o HB_LANG_PT, alguem ja passou por isso e consegui resolver.
#include "hwgui.ch"
function main()
REQUEST HB_CODEPAGE_PTISO
REQUEST HB_LANG_PT
HB_SETCODEPAGE( 'PTISO' )
HB_LANGSELECT( 'PT' )
altcliente()
return nil
Function aLTCLIENTE()
Local oDlg, oPanel, oButton1
Private nPES, gPes, vPes:="", keyAnt:=0, aVERDE, aAMARELO, oTECLA:="", nORDEM:=1, cRAZ
PRIVATE CM1:=1, aCOMBO, nPosicao:=0, cProgressKey:=""
KSETCAPS(.T.)
aCOMBO:= {[1 - Razao ],;
[2 - Codigo ],;
[3 - N chave ] }
USE xCLIENTE NEW SHARED
SET INDEX TO xRCLIDES,xRCLICOD,xRCLINCH
DECLARE V1[52], V2[52], V3[52]
// REGISTRO MASCARA DESCRITIVO
V1[01]:="RAZAO" ; V2[01]:="@!" ; V3[01]:="Razao Social"
V1[02]:="COMCLAS1" ; V2[02]:="!!" ; V3[02]:="Cat"
V1[03]:="NONCO" ; V2[03]:="999999" ; V3[03]:="CRM"
V1[04]:="ADMI" ; V2[04]:="@!" ; V3[04]:="Medico"
V1[05]:="ATIVO" ; V2[05]:="!" ; V3[05]:="S "
V1[06]:="ULTCONTATO" ; V2[06]:="99/99/9999" ; V3[06]:="UltimoCto"
V1[07]:="PROCONTATO" ; V2[07]:="99/99/9999" ; V3[07]:="Proximo"
INIT DIALOG oDlg TITLE "Cadastro de Clientes" AT 0, 0 SIZE 814, 484 BACKCOLOR 12632256 ;
STYLE WS_TABSTOP+DS_CENTER FONT HFont():Add( "MS Sans Serif",0,-13 )
@ 0,0 PANEL oPanel SIZE 814,32 ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS
@ 2,3 OWNERBUTTON OF oPanel ON CLICK {||hwg_MsgInfo("Proximo")} ;
SIZE 32,26 FLAT BITMAP "next.bmp"
@ 34,3 OWNERBUTTON OF oPanel ON CLICK {||hwg_MsgInfo("Ultimo")} ;
SIZE 32,26 FLAT BITMAP "bottom.bmp"
@ 66,3 OWNERBUTTON OF oPanel ON CLICK {||hwg_MsgInfo("Primeiro")} ;
SIZE 32,26 FLAT BITMAP "top.bmp"
@ 98,3 OWNERBUTTON OF oPanel ON CLICK {||hwg_MsgInfo("Anterior")} ;
SIZE 32,26 FLAT BITMAP "previous.bmp"
@ 500,370 SAY gPes CAPTION vPes SIZE 300,22 COLOR 255
@ 02,50 BROWSE oBrw1 DATABASE OF oDLG SIZE 750,300 AUTOEDIT STYLE WS_TABSTOP+WS_HSCROLL
oBrw1:alias := "xCLIENTE"
oBrw1:aColumns := {}
oBrw1:bColorSel := 12507070
Teste_CreateColumn( oBrw1, V1[01], V3[01], "xCLIENTE", nORDEM, V2[01])
Teste_CreateColumn( oBrw1, V1[02], V3[02], "xCLIENTE", nORDEM, V2[02])
Teste_CreateColumn( oBrw1, V1[03], V3[03], "xCLIENTE", nORDEM, V2[03])
Teste_CreateColumn( oBrw1, V1[04], V3[04], "xCLIENTE", nORDEM, V2[04])
Teste_CreateColumn( oBrw1, V1[05], V3[05], "xCLIENTE", nORDEM, V2[05])
Teste_CreateColumn( oBrw1, V1[06], V3[06], "xCLIENTE", nORDEM, V2[06])
Teste_CreateColumn( oBrw1, V1[07], V3[07], "xCLIENTE", nORDEM, V2[07])
oBrw1:bKeyDown := { |o,key|HB_SYMBOL_UNUSED(o),IIF(key==27,(hwg_EndDialog(oDlg:handle),.F.),a_BrwKeyfun(o,key))}
oBrw1:Refresh()
@ 680,400 BUTTON oButton1 CAPTION "Sai&r" SIZE 100,32 STYLE WS_TABSTOP ;
ON CLICK {|| DBCLOSEALL(), oDLG:Close() }
@ 540,400 BUTTON oButton2 CAPTION "&Ordem" SIZE 98,32 STYLE WS_TABSTOP ;
ON CLICK {|| MsgGetORDEM( @nORDEM, @aCOMBO ), xCLIENTE->(DBSETORDER(nORDEM)), oBrw1:Refresh(), oBrw1:Setfocus() }
ACTIVATE DIALOG oDlg
return nil
STATIC FUNCTION Teste_CreateColumn( oBrw, oCol, oHead, oAr, seq, xPIC )
Local i
Local nArea := &oAr->(select())
IF VALTYPE(xCLIENTE->(&oCol)) = [C]
oBrw:AddColumn( HColumn():New( oHead , FieldWBlock( oCol, nArea ),,,, .F. ,DT_LEFT , DT_LEFT , xPIC)) //, oType, oLen, oDec, .F. ) )
ELSEIF VALTYPE(xCLIENTE->(&oCol)) = [N]
oBrw:AddColumn( HColumn():New( oHead , FieldWBlock( oCol, nArea ),,,, .F. ,DT_RIGHT , DT_RIGHT , xPIC)) //, oType, oLen, oDec, .F. ) )
ELSE
oBrw:AddColumn( HColumn():New( oHead , FieldWBlock( oCol, nArea ),,,, .F. ,DT_CENTER, DT_CENTER , xPIC)) //, oType, oLen, oDec, .F. ) )
ENDIF
oBrw:Refresh()
RETURN Nil
FUNCTION a_BrwKeyFun( oBrw, key ) // Pesquisa incremnetal em arqquivo DBF
LOCAL nPosicao:=0, nKeyPress:=key
LOCAL cRegEx := "[a-zA-Z0-9 ]{1}"
KSETCAPS(.T.)
/*
if hwg_ISNUMLOCKACTIVE()
hwg_msginfo(Chr(nKeyPress)+[ - ]+str(nKeyPress))
endif
*/
aResult:=HB_RegEx( cRegEx, Chr(nKeyPress) )
IF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ "13|34|33|37|38|39|40|20|16"
cProgressKey:=""
gPES:settext(cProgressKey)
RETURN .T.
ENDIF
IF nKeyPress = VK_F5
cProgressKey:=""
gPES:settext(cProgressKey)
nORDEM:=1
xCLIENTE->(DBSETORDER(nORDEM))
oBrw:Refresh()
RETURN .T.
ELSEIF nKeyPress = VK_F6
cProgressKey:=""
gPES:settext(cProgressKey)
nORDEM:=2
xCLIENTE->(DBSETORDER(nORDEM))
oBrw:Refresh()
RETURN .T.
ELSEIF nKeyPress = VK_F7
cProgressKey:=""
gPES:settext(cProgressKey)
nORDEM:=3
xCLIENTE->(DBSETORDER(nORDEM))
oBrw:Refresh()
RETURN .T.
ENDIF
// IF IsAscii(Chr(nKeyPress)) .AND. nKeyPress # 8
If nKeyPress # 8
cProgressKey += Chr(nKeyPress)
nPosicao:=AScan(oBrw:aArray,cProgressKey)
gPES:settext(cProgressKey)
PesqInc( oBrw, key )
ELSEIF nKeyPress = 8 .AND. Len(cProgressKey) >= 1
cProgressKey:=Left(cProgressKey,Len(cProgressKey) - 1)
nPosicao:=AScan(oBrw:aArray,cProgressKey)
gPES:settext(cProgressKey)
PesqInc( oBrw, key )
ENDIF
IF nPosicao # 0
oBrw:rowPos := nPosicao
Eval( oBrw:bGoTo, oBrw, nPosicao )
oBrw:Refresh()
ENDIF
RETURN .T.
Function PesqInc( oBrw, key )
KSETCAPS(.T.)
xCLIENTE->(DBSETORDER(nORDEM))
vPes := cProgressKey
gPes:SetText(vPes)
xCLIENTE->(dbseek(vpes, .t.))
IF xCLIENTE->(FOUND())
oBRW:REFRESH()
oBrw:Setfocus()
nPosicao:=xCLIENTE->(RECNO())
return .t.
ELSE
hwg_Msginfo([Ultimo item localizado conforme os caracteres digitados],[Atenção])
oBRW:REFRESH()
oBRW:Setfocus()
return .t.
ENDIF
return .F.
Function MsgGetORDEM( nORDEM , aCOMBO )
Local oModDlg, oFont := HFont():Add( "TAHOMA",0,-13 )
LOCAL oCOMBO, CM:=nORDEM
INIT DIALOG oModDlg TITLE "Alterar ordem da listagem" SIZE 300,140 ;
FONT oFont CLIPPER NOEXIT STYLE DS_MODALFRAME+WS_POPUP+WS_VISIBLE+WS_CAPTION+WS_SYSMENU+DS_CENTER
@ 20,10 SAY "Ordem da pesquisa" SIZE 220,22
@ 20,35 GET COMBOBOX oCOMBO VAR CM ITEMS aCombo SIZE 180,25 STYLE WS_TABSTOP
@ 200,95 BUTTON "Ok" ID 101 SIZE 90,24 STYLE WS_TABSTOP ;
ON CLICK { || nORDEM:=VAL(SUBSTR(aCOMBO[CM],1,1)), hwg_EndDialog(), oBRW1:SETFOCUS() }
ACTIVATE DIALOG oModDlg
oFont:Release()
Return nORDEM