Amigos del foro tengan buena tarde...
Lo que pasa es que hace tiempo diseñe un pequeño teclado virtual, para que funcionara con monitores touch, y pues hasta ahora me ha funcionado sin problema. Lo tengo creado de la siguiente manera:

y al hacer clic sobre las teclas hace lo siguiente:
Pero resulta que la cosa se complico por que ahora necesito colocar dos GETS mas y que el teclado también funcione en los otros dos gets.
De momento se me ocurre que si se cual es el control que tiene el foco, puedo actualizar su variable. Buscando en el foro encontre la siguiente función:
Pero no me funciono,
La otra es saber si ya existe alguna clase para un teclado virtual?
Alguien me puede pegar una ayudadita.
Lo que pasa es que hace tiempo diseñe un pequeño teclado virtual, para que funcionara con monitores touch, y pues hasta ahora me ha funcionado sin problema. Lo tengo creado de la siguiente manera:
*******************************
*MUESTRA EL TECLADO EN PANTALLA
*******************************
PROC pMueTec(vProce,oCuadro,vIdenti)
DEFINE FONT oFont0 NAME "Trebouchet" SIZE 0, -14 BOLD
DEFINE FONT oFont1 NAME "Trebouchet" SIZE 0, -40 BOLD
DEFINE FONT oFont2 NAME "Trebouchet" SIZE 0, -22 BOLD
DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuaTec RESOURCE "orCajare2" ICON "#8001" TRANSPARENT BRUSH oFondo OF oCuadro
REDEFINE SAY oLamcla:oCSTe1 VAR oLamcla:vCSTe1 ID 4017 FONT oFont2 COLOR nRGB(198, 8,8)
REDEFINE SAY oLamcla:oCSTe2 VAR oLamcla:vCSTe2 ID 4018 FONT oFont2 COLOR nRGB(198, 8,8)
REDEFINE GET oLamcla:oCGTe1 VAR oLamcla:vCGTe1 ID 4012 FONT oFont1 COLOR nRGB(198, 8,8) PICTURE oLamcla:PIC7
REDEFINE SBUTTON oBtn1 ID 4001 OF oCuaTec PROMPT "1" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("1",vProce)
REDEFINE SBUTTON oBtn2 ID 4002 OF oCuaTec PROMPT "2" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("2",vProce)
REDEFINE SBUTTON oBtn3 ID 4003 OF oCuaTec PROMPT "3" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("3",vProce)
REDEFINE SBUTTON oBtn4 ID 4004 OF oCuaTec PROMPT "4" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("4",vProce)
REDEFINE SBUTTON oBtn5 ID 4005 OF oCuaTec PROMPT "5" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("5",vProce)
REDEFINE SBUTTON oBtn6 ID 4006 OF oCuaTec PROMPT "6" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("6",vProce)
REDEFINE SBUTTON oBtn7 ID 4007 OF oCuaTec PROMPT "7" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("7",vProce)
REDEFINE SBUTTON oBtn8 ID 4008 OF oCuaTec PROMPT "8" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("8",vProce)
REDEFINE SBUTTON oBtn9 ID 4009 OF oCuaTec PROMPT "9" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("9",vProce)
REDEFINE SBUTTON oBtn0 ID 4011 OF oCuaTec PROMPT "00" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("00",vProce)
REDEFINE SBUTTON oBtn_ ID 4010 OF oCuaTec PROMPT "0" COLORS CLR_BLACK, nRGB(198, 8,8), nRGB( 147, 60, 60 ) OFFICE FONT oFont1 ACTION pTeclado("0",vProce)
REDEFINE SBUTTON oBtn_1 ID 4013 OF oCuaTec PROMPT "<<" COLORS CLR_BLACK, nRGB(104,191,207 ), nRGB( 137, 206, 218 ) OFFICE FONT oFont1 ACTION pTeclado("B",vProce)
REDEFINE SBUTTON oBtn_2 ID 4014 OF oCuaTec PROMPT "C" COLORS CLR_BLACK, nRGB(104,191,207 ), nRGB( 137, 206, 218 ) OFFICE FONT oFont1 ACTION pTeclado("C",vProce)
REDEFINE SBUTTON oBtn_3 ID 4015 OF oCuaTec PROMPT "Cancela" COLORS CLR_BLACK, nRGB(104,191,207 ), nRGB( 137, 206, 218 ) OFFICE FONT oFont0 ACTION oCuaTec:end()
REDEFINE SBUTTON oLamcla:oBtn_4 ID 4016 OF oCuaTec PROMPT "Venta" COLORS CLR_BLACK, nRGB(104,191,207 ), nRGB( 137, 206, 218 ) OFFICE FONT oFont0 ACTION pEjeACti(vProce,vIdenti,oCuaTec)
oCuaTec:cTitle := "Teclado Virtual"
oCuaTec:bKeyDown := {|nKey|iif(nKey == 96,pTeclado("0",vProce),iif(nKey == 97,pTeclado("1",vProce),;
iif(nKey == 98,pTeclado("2",vProce),iif(nKey == 99,pTeclado("3",vProce),iif(nKey == 100,pTeclado("4",vProce),;
iif(nKey == 101,pTeclado("5",vProce),iif(nKey == 102,pTeclado("6",vProce),iif(nKey == 103,pTeclado("7",vProce),;
iif(nKey == 104,pTeclado("8",vProce),iif(nKey == 105,pTeclado("9",vProce),iif(nKey == 8,pTeclado("B",vProce),;
iif(nKey == 13,pRegCaja(vIdenti,oCuaTec),""))))))))))))}
oCuaTec:bStart = { || oLamcla:oBtn_4:setfocus()}
ACTIVATE DIALOG oCuaTec On Init (Centra( oCuaTec ),oCuaTec:refresh()) CENTERED
y al hacer clic sobre las teclas hace lo siguiente:
********************
*TECLADO INTERACTIVO
********************
PROC pTeclado(vTecla,vProce)
vPrecio:=alltrim(str(round(oLamcla:vCGTe1,0)))
nAt = AScan( oCuaTec:aControls, { | o | o:lFocused } )
if nAt != 0
MsgInfo( oCuaTec:aControls[ nAt ]:ClassName() )
// MsgInfo( oDlg:aControls[ nAt ]:nId )
endif
IF vTecla="1" .or. vTecla="2" .or. vTecla="3" .or. vTecla="4" .or. vTecla="5" .or. vTecla="6" .or. vTecla="7" .or. vTecla="8" .or. vTecla="9" .or. vTecla="0" .or. vTecla="00"
oLamcla:oCGTe1:settext(oLamcla:vCGTe1:=(val(alltrim(vPrecio+vTecla))))
oLamcla:oCGTe1:refresh()
IF vProce=2
//oLamcla:settext("SU CAMBIO: "+transform(oLamcla:=oLamcla:vCGTe1-oLamcla:vCatot,oLamcla:PIC7))
oLamcla:oCSTe2:settext("SU CAMBIO: "+transform(oLamcla:vCSTe2:=oLamcla:vCGTe1-vGFina,oLamcla:PIC7))
ENDIF
ELSEIF vTecla="C"
oLamcla:oCGTe1:settext(oLamcla:vCGTe1:=0)
oLamcla:oCGTe1:refresh()
IF vProce=2
//oLamcla:settext("SU CAMBIO: "+transform(oLamcla:=oLamcla:vCGTe1-oLamcla:vCatot,oLamcla:PIC7))
oLamcla:oCSTe2:settext("SU CAMBIO: "+transform(oLamcla:vCSTe2:=oLamcla:vCGTe1-vGFina,oLamcla:PIC7))
ENDIF
ELSEIF vTecla="B"
vDig:=len(vPrecio)
vPrecio:=subs(vPrecio,1,vDig-1)
oLamcla:oCGTe1:settext(oLamcla:vCGTe1:=(val(alltrim(vPrecio))))
oLamcla:oCGTe1:refresh()
IF vProce=2
//oLamcla:settext("SU CAMBIO: "+transform(oLamcla:=oLamcla:vCGTe1-oLamcla:vCatot,oLamcla:PIC7))
oLamcla:oCSTe2:settext("SU CAMBIO: "+transform(oLamcla:vCSTe2:=oLamcla:vCGTe1-vGFina,oLamcla:PIC7))
ENDIF
ENDIF
oLamcla:oBtn_4:setfocus()Pero resulta que la cosa se complico por que ahora necesito colocar dos GETS mas y que el teclado también funcione en los otros dos gets.
De momento se me ocurre que si se cual es el control que tiene el foco, puedo actualizar su variable. Buscando en el foro encontre la siguiente función:
nAt = AScan( oCuaTec:aControls, { | o | o:lFocused } )
if nAt != 0
MsgInfo( oCuaTec:aControls[ nAt ]:ClassName() )
// MsgInfo( oDlg:aControls[ nAt ]:nId )
endifPero no me funciono,
La otra es saber si ya existe alguna clase para un teclado virtual?
Alguien me puede pegar una ayudadita.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]