FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour On screen Keyboard
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
On screen Keyboard
Posted: Tue Apr 01, 2014 01:33 PM

I need to use a "on screen keyboard"...

Any idea on how to do it.. Maybe the use of OSK.exe, the virtual keyboard provided by Windows, or any other which can be easily implemented.

I took a look on the KEYBSIM.PRG sample on FWH SAMPLES folder. There I have a start point, but before reinventing the wheel , I prefer to ask.

Thanks in advance.

From Chile
Adolfo

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 1598
Joined: Fri Oct 07, 2005 05:56 PM
Re: On screen Keyboard
Posted: Mon Apr 21, 2014 04:55 AM
Dear Adolfo,

I've used "Free Virtual Keyboard (http://www.FreeVirtualKeyboard.com)". I thought, it is not good choice but it works enough for my knowledge (what I can do).

Code (fw): Select all Collapse
#define VK_TITLE "Free Virtual Keyboard (<!-- m --><a class="postlink" href="http://www.FreeVirtualKeyboard.com">http://www.FreeVirtualKeyboard.com</a><!-- m -->)"

..
    ToggleVK()
    ShowWindow( VkWnd(), 0 )
..
//---------------------------//
Function ToggleVK()
local hVK    := VkWnd()

if Empty( hVK )
   WinExec( "FreeVK.Exe" )
elseif IsIconic( hVK ) .or. ! IsWindowVisible( hVK )
   ShowWindow( hVK, 9 ) // 8 sHOW NORMAL   9 = Restore
else
   ShowWindow( hVK, 0 ) // HIDE
endif

return nil

//--------------------------//
Function VkWnd()

   static hWndVK  := 0

   if ! IsWindow( hWndVK )
      hWndVK   := FindWindow( 0, VK_TITLE )
   endif

return hWndVK
Regards,

Dutch



FWH 2304 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio

FWPPC 10.02 / Harbour for PPC (FTDN)

ADS V.9 / MySql / MariaDB

R&R 12 Infinity / Crystal Report XI R2

(Thailand)
Posts: 174
Joined: Sat Feb 23, 2013 10:04 AM
Re: On screen Keyboard
Posted: Mon Apr 21, 2014 12:22 PM
Posts: 990
Joined: Thu Nov 17, 2005 05:49 PM
Re: On screen Keyboard
Posted: Mon May 05, 2014 07:53 PM
I always find that i'm better of by just drawing my own keyboard and then manage it using fwKeyboard() Func.

Here is sample code:
Code (fw): Select all Collapse
*-------------------------------------------------------------------------------------------------------------------------------
METHOD DrawScreen() CLASS TAutoReg
Local oSelf := Self
local cDob  := Spac( 10 )
local oBrush, oSay
local nAge := 0

    SET DATE TO FRENCH
    
    DEFINE BRUSH oBrush RESOURCE "LongGradient"
    DEFINE DIALOG ::oDlg NAME "AutoRegisterDlg" TITLE "ER Auto-Register" BRUSH oBrush TRANSPARENT

    REDEFINE GET ::aoGets[ 1 ] Var ::oReg:VarLast1 ID 129 ;
        OF ::oDlg FONT ::aoFonts[ 1 ] PICTURE "!" UPDATE

    ::aoGets[ 1 ]:bGotFocus := { || ::oActive := ::aoGets[ 1 ] }

    REDEFINE GET ::aoGets[ 2 ] Var ::oReg:VarLast2 ID 130 ;
        OF ::oDlg FONT ::aoFonts[ 1 ]  PICTURE "!" UPDATE
        
    ::aoGets[ 2 ]:bGotFocus := { || ::oActive := ::aoGets[ 2 ] }

    REDEFINE GET ::aoGets[ 3 ] Var ::oReg:VarFirstName ID 131 ;
        OF ::oDlg FONT ::aoFonts[ 1 ]  PICTURE "!" UPDATE

    REDEFINE SAY oSay PROMPT "Solo los últimos 4 dígitos" ID 1000 OF ::oDlg
    oSay:SetColor( CLR_RED, CLR_YELLOW )

    REDEFINE SAY oSay PROMPT "Día/Mes/Año" ID 1001 OF ::oDlg
    oSay:SetColor( CLR_RED, CLR_YELLOW )
    
    ::aoGets[ 3 ]:bGotFocus := { || ::oActive := ::aoGets[ 3 ] }
    
    REDEFINE GET ::aoGets[ 4 ] Var ::oReg:VarSSN ID 132 OF ::oDlg FONT ::aoFonts[ 1 ] UPDATE
    ::aoGets[ 4 ]:bGotFocus := { || ::oActive := ::aoGets[ 4 ] }


    REDEFINE GET ::aoGets[ 5 ] Var cDob ID 133 ;
        OF ::oDlg FONT ::aoFonts[ 1 ]  PICTURE "99/99/9999" 
        
    ::aoGets[ 5 ]:bChange := { || ::oReg:VarbDate := ctod( cDob ) }
    ::aoGets[ 5 ]:bGotFocus := { || ::oActive := ::aoGets[ 5 ] }

    REDEFINE BTNBMP ::aoBtns[ 1 ] ID 110 OF ::oDlg RESOURCE "AS" NOBORDER ACTION oSelf:Insert( Asc( "A" ) )
    REDEFINE BTNBMP ::aoBtns[ 2 ] ID 111 OF ::oDlg RESOURCE "SS" NOBORDER ACTION oSelf:Insert( Asc( "S" ) )
    REDEFINE BTNBMP ::aoBtns[ 3 ] ID 112 OF ::oDlg RESOURCE "DS" NOBORDER ACTION oSelf:Insert( Asc( "D" ) )
    REDEFINE BTNBMP ::aoBtns[ 4 ] ID 113 OF ::oDlg RESOURCE "FS" NOBORDER ACTION oSelf:Insert( Asc( "F" ) )
    REDEFINE BTNBMP ::aoBtns[ 5 ] ID 114 OF ::oDlg RESOURCE "GS" NOBORDER ACTION oSelf:Insert( Asc( "G" ) )
    REDEFINE BTNBMP ::aoBtns[ 6 ] ID 115 OF ::oDlg RESOURCE "HS" NOBORDER ACTION oSelf:Insert( Asc( "H" ) )
    REDEFINE BTNBMP ::aoBtns[ 7 ] ID 116 OF ::oDlg RESOURCE "JS" NOBORDER ACTION oSelf:Insert( Asc( "J" ) )
    REDEFINE BTNBMP ::aoBtns[ 8 ] ID 117 OF ::oDlg RESOURCE "KS" NOBORDER ACTION oSelf:Insert( Asc( "K" ) )
    REDEFINE BTNBMP ::aoBtns[ 9 ] ID 118 OF ::oDlg RESOURCE "LS" NOBORDER ACTION oSelf:Insert( Asc( "L" ) )
    REDEFINE BTNBMP ::aoBtns[ 10] ID 100 OF ::oDlg RESOURCE "QS" NOBORDER ACTION oSelf:Insert( Asc( "Q" ) )
    REDEFINE BTNBMP ::aoBtns[ 11] ID 101 OF ::oDlg RESOURCE "WS" NOBORDER ACTION oSelf:Insert( Asc( "W" ) )
    REDEFINE BTNBMP ::aoBtns[ 12] ID 102 OF ::oDlg RESOURCE "ES" NOBORDER ACTION oSelf:Insert( Asc( "E" ) )
    REDEFINE BTNBMP ::aoBtns[ 13] ID 103 OF ::oDlg RESOURCE "RS" NOBORDER ACTION oSelf:Insert( Asc( "R" ) )
    REDEFINE BTNBMP ::aoBtns[ 14] ID 104 OF ::oDlg RESOURCE "TS" NOBORDER ACTION oSelf:Insert( Asc( "T" ) )
    REDEFINE BTNBMP ::aoBtns[ 15] ID 105 OF ::oDlg RESOURCE "YS" NOBORDER ACTION oSelf:Insert( Asc( "Y" ) )
    REDEFINE BTNBMP ::aoBtns[ 16] ID 106 OF ::oDlg RESOURCE "US" NOBORDER ACTION oSelf:Insert( Asc( "U" ) )
    REDEFINE BTNBMP ::aoBtns[ 17] ID 107 OF ::oDlg RESOURCE "IS" NOBORDER ACTION oSelf:Insert( Asc( "I" ) )
    REDEFINE BTNBMP ::aoBtns[ 18] ID 108 OF ::oDlg RESOURCE "OS" NOBORDER ACTION oSelf:Insert( Asc( "O" ) )
    REDEFINE BTNBMP ::aoBtns[ 19] ID 109 OF ::oDlg RESOURCE "PS" NOBORDER ACTION oSelf:Insert( Asc( "P" ) )
    REDEFINE BTNBMP ::aoBtns[ 20] ID 120 OF ::oDlg RESOURCE "ZS" NOBORDER ACTION oSelf:Insert( Asc( "Z" ) )
    REDEFINE BTNBMP ::aoBtns[ 21] ID 121 OF ::oDlg RESOURCE "XS" NOBORDER ACTION oSelf:Insert( Asc( "X" ) )
    REDEFINE BTNBMP ::aoBtns[ 22] ID 122 OF ::oDlg RESOURCE "CS" NOBORDER ACTION oSelf:Insert( Asc( "C" ) )
    REDEFINE BTNBMP ::aoBtns[ 23] ID 123 OF ::oDlg RESOURCE "VS" NOBORDER ACTION oSelf:Insert( Asc( "V" ) )
    REDEFINE BTNBMP ::aoBtns[ 24] ID 124 OF ::oDlg RESOURCE "BS" NOBORDER ACTION oSelf:Insert( Asc( "B" ) )
    REDEFINE BTNBMP ::aoBtns[ 25] ID 125 OF ::oDlg RESOURCE "NS" NOBORDER ACTION oSelf:Insert( Asc( "N" ) )
    REDEFINE BTNBMP ::aoBtns[ 26] ID 126 OF ::oDlg RESOURCE "MS" NOBORDER ACTION oSelf:Insert( Asc( "M" ) )
    REDEFINE BTNBMP ::aoBtns[ 27] ID 136 OF ::oDlg RESOURCE "Num1S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD1 )
    REDEFINE BTNBMP ::aoBtns[ 28] ID 137 OF ::oDlg RESOURCE "Num2S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD2 )
    REDEFINE BTNBMP ::aoBtns[ 29] ID 138 OF ::oDlg RESOURCE "Num3S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD3 )
    REDEFINE BTNBMP ::aoBtns[ 30] ID 139 OF ::oDlg RESOURCE "Num4S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD4 )
    REDEFINE BTNBMP ::aoBtns[ 31] ID 140 OF ::oDlg RESOURCE "Num5S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD5 )
    REDEFINE BTNBMP ::aoBtns[ 32] ID 141 OF ::oDlg RESOURCE "Num6S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD6 )
    REDEFINE BTNBMP ::aoBtns[ 33] ID 142 OF ::oDlg RESOURCE "Num7S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD7 )
    REDEFINE BTNBMP ::aoBtns[ 34] ID 143 OF ::oDlg RESOURCE "Num8S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD8 )
    REDEFINE BTNBMP ::aoBtns[ 35] ID 144 OF ::oDlg RESOURCE "Num9S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD9 )
    REDEFINE BTNBMP ::aoBtns[ 36] ID 145 OF ::oDlg RESOURCE "Num0S" NOBORDER ACTION oSelf:Insert(  VK_NUMPAD0 )
//  REDEFINE BTNBMP ::aoBtns[ 37] ID 119 OF ::oDlg RESOURCE "TabS" NOBORDER ACTION oSelf:Insert(  VK_TAB )
    REDEFINE BTNBMP ::aoBtns[ 38] ID 128 OF ::oDlg RESOURCE "EnterS" NOBORDER ACTION oSelf:Insert(  K_ENTER )
    REDEFINE BTNBMP ::aoBtns[ 39] ID 152 OF ::oDlg RESOURCE "DeleteS" NOBORDER ACTION oSelf:Insert(  VK_DELETE )
    REDEFINE BTNBMP ::aoBtns[ 40] ID 147 OF ::oDlg RESOURCE "PrinterS", "PrinterU", "PrinterU" NOBORDER ACTION oSelf:Save()
//  REDEFINE BTNBMP ::aoBtns[ 41] ID 127 OF ::oDlg RESOURCE "SpaceBar" NOBORDER ACTION oSelf:Insert( VK_SPACE )
    REDEFINE BTNBMP ::aoBtns[ 42] ID 134 OF ::oDlg RESOURCE "LeftS" NOBORDER ACTION oSelf:Insert( VK_LEFT )
    REDEFINE BTNBMP ::aoBtns[ 43] ID 135 OF ::oDlg RESOURCE "RightS" NOBORDER ACTION oSelf:Insert( VK_RIGHT )
    REDEFINE BTNBMP ::aoBtns[ 44] ID 148 OF ::oDlg RESOURCE "BackSpaceS" NOBORDER ACTION oSelf:Insert( VK_BACK )
    REDEFINE BTNBMP ::aoBtns[ 45] ID 149 OF ::oDlg RESOURCE "UpS" NOBORDER ACTION oSelf:Insert( VK_UP )
    REDEFINE BTNBMP ::aoBtns[ 41] ID 153 OF ::oDlg RESOURCE "btnman" NOBORDER //ACTION oSelf:Insert( VK_UP )
    REDEFINE BTNBMP ::aoBtns[ 37] ID 154 OF ::oDlg RESOURCE "btnwoman" NOBORDER //ACTION oSelf:Insert( VK_UP )
    aeval( ::aoBtns, { |e| e:ltransparent := .t. } )

RETURN NIL 


*-------------------------------------------------------------------------------------------------------------------------------
METHOD Insert( nKey ) CLASS TAutoReg

    if Len( alltrim( ::oActive:cText() ) ) < 16
        //SndPlayResource( "CLICK",1 )
        SndPlayResource( "TIC",1 )
        FwKeyboard( ::oActive, nKey )
    Endif

    iif( empty( ::oReg:VarLast1 ) .or. ;
        empty( ::oReg:VarFirstName ) .or. ;
        empty( ::oReg:VarSSN ), ;
                ::aoBtns[ 40 ]:Disable()    ,;
                ::aoBtns[ 40 ]:Enable() )

    ::oActive:SetFocus()

RETURN NIL


Here is a picture:


Reinaldo.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: On screen Keyboard
Posted: Tue May 06, 2014 11:44 AM

Reinaldo,

Muy bonito, enhorabuena :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion