FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Teclado Numerico Virtual - Control del foco
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Teclado Numerico Virtual - Control del foco
Posted: Fri Aug 23, 2013 11:09 PM
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:
Code (fw): Select all Collapse
*******************************
*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:

Code (fw): Select all Collapse
********************
*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:

Code (fw): Select all Collapse
nAt = AScan( oCuaTec:aControls, { | o | o:lFocused } )
if nAt != 0
   MsgInfo( oCuaTec:aControls[ nAt ]:ClassName() )
   // MsgInfo( oDlg:aControls[ nAt ]:nId )
endif


Pero 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) ]
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Teclado Numerico Virtual - Control del foco
Posted: Sat Aug 24, 2013 01:00 AM

leandro
yo lo hago asi con el teclado de windows :

LOCAL cKeyboard := GetEnv( "windir" ) + "\system32\osk.exe", lKeyboard := .f.

REDEFINE BUTTONBMP aoBtn ID 401 OF oDlg BITMAP "TECLADO" ;
ACTION ( oBrw:SetFocus(), ShellExecute( 0, "open", cKeyboard ) )

cKeyboard := NIL
SendMessage( FindWindow( 0, "Teclado en pantalla" ), WM_CLOSE )

y sin problemas
saludos
paco

____________________

Paco

Continue the discussion