on screen keyboard

Post your FreeBASIC source, examples, tips and tricks here. Please don’t post code without including an explanation.
Post Reply
BasicCoder2
Posts: 3906
Joined: Jan 01, 2009 7:03
Location: Australia

on screen keyboard

Post by BasicCoder2 »

This is my first attempt at implementing a virtual keyboard on the display.
The idea was to be able to substitute key = inkey with key = readKeyBoard()

In the demo clicking a character will add to a string called text.
The Enter key will erase the contents of text.
Any other 2 character keys will have their asc code displayed.
Exit the demo using the real keyboard esc key.



First run this to make the layout.bmp which is an image of the keyboard used by the demo.
Have edited it with the suggestions that dodicat makes in the next post.

Code: Select all

screenres 888,260,32
width 888\8,256\16
color rgb(0,0,0),rgb(255,0,255):cls

'=============  CREATE ARROW BITMAPS ================

'dimension pointers to bitmaps
dim shared as any ptr arrows(0 to 3)

'create bitmaps
for k as integer = 0 to 3
    arrows(k)=imagecreate(17,17)
next k

'draw arrows into bitmaps
dim as integer v  'read pixel value
for k as integer = 0 to 3
    for j as integer = 0 to 16
        for i as integer = 0 to 16
            read v
            if v = 1 then
                pset arrows(k),(i,j),rgb(0,0,0)
            else
                pset arrows(k),(i,j),rgb(255,0,255)
            end if
        next i
    next j
print
next k

DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0
DATA 1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
DATA 1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1
DATA 0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0

'=====================================================

type BUTTON
    as integer x
    as integer y
    as integer w
    as integer h
    as string  lblA
    as string  lblB
end type

sub drawButton(btn as BUTTON)
    line (btn.x,btn.y)-(btn.x+btn.w,btn.y+btn.h),rgb(0,0,0),b
    draw string (btn.x+4,btn.y+2),btn.lblB
    draw string (btn.x+4,btn.y+20),btn.lblA
end sub

const btnCount = 101
dim shared as BUTTON btns(1 to btnCount)

for i as integer = 1 to btnCount
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).lblA
    read btns(i).lblB
next i

for i as integer = 1 to btnCount
    drawButton(btns(i))
next i

put (633+8,173+10),arrows(3),trans  'up arrow
put (768+8,98+16),arrows(3),trans
put (595+8,211+10),arrows(2),trans  'left arrow
put (729+8,136+16),arrows(2),trans
put (635+8,213+10),arrows(1),trans  'down arrow
put (768+8,174+16),arrows(1),trans
put (671+8,211+10),arrows(0),trans  'right arrow
put (806+8,136+16),arrows(0),trans

'draw vertical ENTER label
draw string (854,180),"E"
draw string (854,192),"N"
draw string (854,204),"T"
draw string (854,216),"E"
draw string (854,228),"R"

draw string (455,139),chr(34)  'double inverted comma

bsave "layout.bmp",0   'save as bitmap image

sleep


data 3,60,36,36,   "`","~"
data 41,60,36,36,  "1","!"
data 79,60,36,36,  "2","@"
data 117,60,36,36, "3","#"
data 155,60,36,36, "4","$"
data 193,60,36,36, "5","%"
data 231,60,36,36, "6","^"
data 269,60,36,36, "7","&"
data 307,60,36,36, "8","*"
data 345,60,36,36, "9","("
data 383,60,36,36, "0",")"
data 421,60,36,36, "-","_"
data 459,60,36,36, "=","+"
data 497,60,71,36, "space","back"
data 3,98,55,36, "","tab"
data 60,98,36,36, "Q","q"
data 98,98,36,36, "W","w"
data 136,98,36,36, "E","e"
data 174,98,36,36, "R","r"
data 212,98,36,36, "T","t"
data 250,98,36,36, "Y","y"
data 288,98,36,36, "U","u"
data 326,98,36,36, "I","i"
data 364,98,36,36, "O","o"
data 402,98,36,36, "P","p"
data 440,98,36,36, "[","{"
data 478,98,36,36, "]","}"
data 516,98,52,36, "\","|"
data 3,136,67,36,   "lock","caps"
data 72,136,36,36,  "A","a"
data 110,136,36,36, "S","s"
data 148,136,36,36, "D","d"
data 186,136,36,36, "F","f"
data 224,136,36,36, "G","g"
data 262,136,36,36, "H","h"
data 300,136,36,36, "J","j"
data 338,136,36,36, "K","k"
data 376,136,36,36, "L","l"
data 414,136,36,36, ";",":"
data 452,136,36,36, "'",""
data 490,136,78,36, "Enter",""
data 3,174,92,36, "Shift",""
data 97,174,36,36, "Z","z"
data 135,174,36,36, "X","x"
data 173,174,36,36, "C","c"
data 211,174,36,36, "V","v"
data 249,174,36,36, "B","b"
data 287,174,36,36, "N","n"
data 325,174,36,36, "M","m"
data 363,174,36,36, ",","<"
data 401,174,36,36, ".",">"
data 439,174,36,36, "/","?"
data 477,174,91,36, "Shift",""
data 3,212,53,36, "Ctrl",""
data 58,212,49,36, "win",""
data 109,212,49,36, "Alt",""
data 160,212,202,36,"",""  'space bar
data 364,212,49,36,"Alt",""
data 415,212,49,36,"win",""
data 466,212,49,36,"",""
data 517,212,52,36,"Ctrl",""

data 2,2,36,36,"ESC",""
data 63,2,36,36,"F1",""
data 101,2,36,36,"F2",""
data 139,2,36,36,"F3",""
data 177,2,36,36,"F4",""
data 241,2,36,36,"F5",""
data 279,2,36,36,"F6",""
data 317,2,36,36,"F7",""
data 355,2,36,36,"F8",""
data 419,2,36,36,"F9",""
data 457,2,36,36,"F10",""
data 495,2,36,36,"F11",""
data 533,2,36,36,"F12",""
data 595,60,36,36,"Ins",""
data 633,60,36,36,"Home",""
data 671,60,36,36,"PgUp",""
data 595,98,36,36,"Del",""
data 633,98,36,36,"End",""
data 671,98,36,36,"PgDn",""
data 633,174,36,36,"",""
data 595,212,36,36,"",""
data 633,212,36,36,"",""
data 671,212,36,36,"",""

data 729,60,36,36,"Lock","Num"
data 767,60,36,36,"/",""
data 805,60,36,36,"*",""
data 843,60,36,36,"-",""
data 729,98,36,36,"Home","7"
data 767,98,36,36,"","8"
data 805,98,36,36,"Pgup","9"
data 843,98,36,74,"+",""
data 729,136,36,36,"","4"
data 767,136,36,36,"","5"
data 805,136,36,36,"","6"
data 729,174,36,36,"End","1"
data 767,174,36,36,"","2"
data 805,174,36,36,"PgDn","3"
data 843,174,36,74,"",""
data 729,212,74,36,"Ins","0"
data 805,212,36,36,"Del","."

And this is the demo.

Code: Select all

screenres 896,480,32
color rgb(0,0,0),rgb(255,255,255):cls

dim shared as any ptr layout
layout = imagecreate(890,260)
bload "layout.bmp",layout

dim shared as integer mx,my,mb

dim shared as integer capsLock,shiftKey,altKey,ctrlKey,numLock  'control keys
dim shared as string fChar

capsLock = 1
shiftKey = 1
altKey   = 1
ctrlKey  = 1
numLock  = 1   'locks number keyboard to numbers only

type BUTTON
    as integer x
    as integer y
    as integer w
    as integer h
    as integer ascVal
    as integer shiftVal
    as ulong   c
end type

sub drawButton(btn as BUTTON)
    line (btn.x,btn.y)-(btn.x+btn.w,btn.y+btn.h-1),btn.c,bf
end sub

const btnCount = 101
dim shared as BUTTON btns(1 to btnCount)

for i as integer = 1 to 11  'read control keys
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    btns(i).c = rgb(0,0,255)
next i

for i as integer = 12 to 63 'read standard keys
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).ascVal
    read btns(i).shiftVal
    btns(i).c = rgb(255,0,0)
next i

for i as integer = 64 to 75 'read function keys
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).ascVal
    'read btns(i).shiftVal
    btns(i).c = rgb(200,100,0)
next i

for i as integer = 76 to 85 'text control keys
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).ascVal
    'read btns(i).shiftVal
    btns(i).c = rgb(200,20,100)
next i

for i as integer = 86 to 90 'operators on number pad
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).ascVal
    'read btns(i).shiftVal
    btns(i).c = rgb(200,120,100)
next i

for i as integer = 91 to 101 'numbers and edit keys on number pad
    read btns(i).x
    read btns(i).y
    read btns(i).w
    read btns(i).h
    read btns(i).ascVal
    read btns(i).shiftVal
    btns(i).c = rgb(100,120,200)
next i

for i as integer = 1 to 90
    drawButton(btns(i))
next i

function readKeyBoard() as string
    dim as string strKey = ""
    getmouse mx,my,,mb
    if mb = 1 then
        
        for i as integer = 1 to 11  'any control button pressed?
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
    
                if i = 1 then capsLock = -capsLock  'toggle caps lock
                
                if capsLock = 1 then
                    btns(1).c = rgb(0,0,255)
                else
                    btns(1).c = rgb(55,255,100)
                end if                
                
                if i = 2 or i = 3 then shiftKey = -shiftKey
                
                if shiftKey = 1 then
                    btns(2).c = rgb(0,0,255)
                    btns(3).c = rgb(0,0,255)
                else
                    btns(2).c = rgb(55,255,100)
                    btns(3).c = rgb(55,255,100)
                end if
                
                if i = 4 or i = 5 then ctrlKey = -ctrlKey
                
                if i = 6 or i = 7 then altKey = -altKey 
                
                if i = 11 then numLock = -numLock
                if numLock = 1 then
                    btns(11).c = rgb(0,0,255)
                else
                    btns(11).c = rgb(55,255,100)
                end if
                
            end if
        next i
    
        for i as integer = 12 to 63  'any standard key pressed?
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
                if shiftKey = -1 then
                    strKey = chr(btns(i).shiftVal)
                else
                    if (capsLock = -1) and ( ( chr(btns(i).shiftVal) >= "A" and chr(btns(i).shiftVal) <= "Z" ) or ( chr(btns(i).ascVal) >= "a" and chr(btns(i).ascVal) <= "z") ) then
                        strKey = chr(btns(i).shiftVal)
                    else
                        strKey = chr(btns(i).ascVal)
                    end if
                end if
                shiftKey = 1 'turn back off
                btns(2).c = rgb(0,0,255)
                btns(3).c = rgb(0,0,255)                
            end if
        next i
        
        for i as integer = 64 to 75  'any function keys pressed
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
                strKey = chr(255) & chr(btns(i).ascVal)
            end if
        next i
        
        for i as integer = 76 to 85 'text control keys
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
                strKey = chr(255) & chr(btns(i).ascVal)
            end if
        next i
        
        for i as integer = 86 to 90 'number keyboard operators
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
                strKey = chr(btns(i).ascVal)
            end if  
        next i
        
        for i as integer = 91 to 101
            if mx>btns(i).x and my>btns(i).y and mx<btns(i).x+btns(i).w and my<btns(i).y+btns(i).h then
                if numLock = 1 then
                    strKey = chr(btns(i).shiftVal)
                else
                    strKey = chr(255) & chr(btns(i).ascVal)
                end if
            end if 
        next i

        while mb=1
            getmouse mx,my,,mb
            sleep 2
        wend
        
    end if
    return strKey
end function

dim as string strKey
dim as string text

do
    
    strKey = readKeyBoard()
    
    if strKey<>"" then
        if len(strKey)=2 then  'function key
            fChar =  right(strKey,1)  'show in display
        else
            
            if asc(strKey) = 8 then  'backspace
                if len(text)> 0 then
                    text = left(text,len(text)-1)
                end if
            else
                if asc(strKey)<>13 then
                    text = text & strKey
                else
                    text = ""
                end if
            end if
            
        end if
        
    end if
    
    screenlock
    cls

    for i as integer = 1 to btnCount
        drawButton(btns(i))  'color buttons
    next i
    
    put (0,0),layout,trans  'overlay button display
    
    locate 35,2
    print text
    
    locate 40,2
    print "fChar = ";fChar;"  ";asc(fChar)
    
    screenunlock
    sleep 2

loop until multikey(&H01)


sleep

'control keys
data 3,136,67,36    'caps lock
data 477,174,91,36  'shift key
data 3,174,92,36    'shift key
data 3,212,53,36    'ctrl key
data 517,212,52,36  'ctrl key
data 109,212,49,36  'alt key
data 364,212,49,36  'alt key
'not used
data 58,212,49,36  'win key
data 415,212,49,36  'win key
data 466,212,49,36 'print
data 729,60,36,36 'number lock

'character keys
data 60,98,36,36, 113,81   'Q
data 98,98,36,36, 119,87   'W
data 136,98,36,36,101,69   'E
data 174,98,36,36,114,82   'R
data 212,98,36,36,116,84   'T
data 250,98,36,36,121,89   'Y
data 288,98,36,36,117,85   'U
data 326,98,36,36,105,73   'I
data 364,98,36,36,111,79   'O
data 402,98,36,36,112,8    'P
data 72,136,36,36,  97,65    'A
data 110,136,36,36, 115,83   'S
data 148,136,36,36, 100,68   'D
data 186,136,36,36, 102,70   'F
data 224,136,36,36, 103,71   'G
data 262,136,36,36, 104,72   'H
data 300,136,36,36, 106,74   'J
data 338,136,36,36, 107,75   'K
data 376,136,36,36, 108,76   'L
data 97,174,36,36, 122,90  'Z
data 135,174,36,36,120,88  'X
data 173,174,36,36,99,67   'C
data 211,174,36,36,118,86  'V
data 249,174,36,36,98,66   'B
data 287,174,36,36,110,78  'N
data 325,174,36,36,109,77  'M

data 3,60,36,36,   96,126  '~ `
data 41,60,36,36,  49,33   '1!
data 79,60,36,36,  50,64   '2@
data 117,60,36,36, 51,35   '3#
data 155,60,36,36, 52,36   '4$
data 193,60,36,36, 53,37   '5%
data 231,60,36,36, 54,94   '6^
data 269,60,36,36, 55,38   '7&
data 307,60,36,36, 56,42   '8*
data 345,60,36,36, 57,40   '9(
data 383,60,36,36, 48,41   '0)
data 421,60,36,36, 45,95   '-_
data 459,60,36,36, 61,43   '=+
data 497,60,71,36, 8,8     'back space
data 3,98,55,36,   9,9     'tab
data 440,98,36,36,91,123   '[{
data 478,98,36,36,93,125   ']}
data 516,98,52,36,92,124   '\|
data 414,136,36,36, 59,58    ';:
data 452,136,36,36, 39,34    '
data 490,136,78,36, 13,13    'ENTER KEY
data 363,174,36,36,44,60   ',<
data 401,174,36,36,46,62   '.>
data 439,174,36,36,47,63   '/?
data 160,212,202,36,32,32  'space bar
data 2,2,36,36,27,27        'esc

'function keys insert chr(255) at start
data 63,2,36,36,59       'F1
data 101,2,36,36,60      'F2
data 139,2,36,36,61      'F3
data 177,2,36,36,62      'F4
data 241,2,36,36,63      'F5
data 279,2,36,36,64      'F6
data 317,2,36,36,65      'F7
data 355,2,36,36,66      'F8
data 419,2,36,36,67      'F9
data 457,2,36,36,68      'F10
data 495,2,36,36,133     'F11
data 533,2,36,36,134     'F12

'all the same with or without shift active, there is alt and ctrl not implemented yet
'insert chr(255) as first character in a two character string
data 595,60,36,36,82     'Insert alt 162 ctrl 146
data 633,60,36,36,71     'Home   alt 151 ctrl 119
data 671,60,36,36,73     'PgUp   alt 153 ctrl 132
data 595,98,36,36,83     'Delete alt 163 ctrl 147
data 633,98,36,36,79     'End    alt 159 ctrl 117
data 671,98,36,36,81     'PgDn   alt 161 ctrl 118
data 633,174,36,36,72    'Up     alt 152 ctrl 141
data 595,212,36,36,75    'Left   alt 155 ctrl 115
data 633,212,36,36,80    'Down   alt 160 ctrl 145
data 671,212,36,36,77    'Right  alt 157 ctrl 116

'all the same with or without shift active
'Do not insert chr(255)!!
data 767,60,36,36,47  '/ DIVISION
data 805,60,36,36,42  '* MULTIPLICATION
data 843,60,36,36,45  '- SUBTRACTION
data 843,98,36,74,43  '+ ADDITION
data 843,174,36,74,13 'Enter... But does it end text entry or just number entry?

'number lock determines which value to return
'for the first value insert chr(255) in a two character string
data 729,98,36,36,71,55     'home and 7
data 767,98,36,36,72,56     'Up Arrow and 8
data 805,98,36,36,73,57     'Pgup and 9"
data 729,136,36,36,75,52    'Left Arrow and 4
data 767,136,36,36,76,53    'nothing and 5
data 805,136,36,36,77,54    'Right Arrow and 6
data 729,174,36,36,79,49    'End and 1
data 767,174,36,36,80,50    'Down Arrow and 2
data 805,174,36,36,81,51    'PgDn and 3"
data 729,212,74,36,82,48    'Insert and 0
data 805,212,36,36,83,46    'Del and decimal point
'
Last edited by BasicCoder2 on Mar 24, 2017 18:07, edited 1 time in total.
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: on screen keyboard

Post by dodicat »

Hi Basiccoder2.
For the sake of two pixels you can use the larger dos font set by setting the width:

screenres 888,260,32
width 888\8,256\16
color rgb(0,0,0),rgb(255,0,255):cls
Post Reply