'  Keyboard Map And ASCII Utility    BillK2867  V 1.1  5/9/2001
'  I tried various methods of creating arrays() of controls
'  this is the only method I found that worked.  This utility is
'  some code to make controlarrays() and demo it.
'  This method saves lots of coding.
'  ---lots of possibilities !
     $TYPECHECK ON
'$Option Icon "C:\Rapidq\Charmap.Ico"  ' Compile Exe With This Icon
     Application.Title="Key Map"

     DECLARE SUB Showpreview(Sender AS QCOOLBTN)
     DECLARE SUB Getfont
     DECLARE SUB Showmap
     DECLARE SUB Checkfield
     DECLARE SUB Showmouse
     DECLARE SUB Do_Keys(Key AS WORD,Shift AS INTEGER)
     DECLARE SUB Closemain
     DECLARE SUB Dummyproc
     DECLARE FUNCTION Qsetfocus LIB "User32" ALIAS "SetFocus"(HWND AS LONG) AS LONG

     DEFINT Map,R,C,X,Fs,Last
     Map=0
     DEFSTR Crlf: Crlf=CHR$(13) & CHR$(10)

     DIM Fontdialog AS QFONTDIALOG

     CREATE Fontb AS QFONT
      Name="Arial":Size=11:Bold=1
     END CREATE

     CREATE Fonta AS QFONT
      Name="MS Sans Serif":Size=12:Bold=1
     END CREATE

     CREATE Form AS QFORM'=========================
      CAPTION="Key Map V1.1"
      Width=260:Height=100
' ' Onmousemove=Showmouse   ' For Design
      Top=50:Left=(Screen.Width-750)/2    ' 750 Is Expanded Form Width
      Wndproc=Dummyproc
      Onclose=Closemain

      CREATE Txtin AS QEDIT
       Font=Fonta:Taborder=1
       Width=25:Height=25
       Top=20:Left=20:Maxlength=1
       Autosize=0
       Onkeydown=Checkfield
       Onkeyup=Do_Keys
      END CREATE

      CREATE Txtkey AS QEDIT
       Font=Fontb:Taborder=2
       Width=50:Height=25
       Left=Txtin.Left + Txtin.Width + 20:Top=Txtin.Top
      END CREATE

      CREATE Txtasc AS QEDIT
       Font=Fontb:Taborder=3
       Width=50:Height=25
       Left=Txtkey.Left + Txtkey.Width + 20:Top=Txtkey.Top
      END CREATE

      CREATE Lblin AS QLABEL
       Font=Fontb:CAPTION="IN:"
       Width=25:Height=15
       Top=5:Left=20
      END CREATE

      CREATE Lblkey AS QLABEL
       Font=Fontb:CAPTION="KEY:"
       Width=50:Height=15
       Left=Lblin.Left + Lblin.Width + 20:Top=Lblin.Top
      END CREATE

      CREATE Lblasc AS QLABEL
       Font=Fontb:CAPTION="ASCII:"
       Width=50:Height=15
       Left=Lblkey.Left + Lblkey.Width + 20:Top=Lblkey.Top
      END CREATE

      CREATE Lblmouse AS QLABEL
       Width=2:Height=15
       Left=1 :Top=1
      END CREATE

      CREATE Btnmap AS QBUTTON
       CAPTION="Map>":Font=Fontb:Taborder=4
       Left=Txtasc.Left + Txtasc.Width + 10:Top=Txtasc.Top
       Width=50:Height=25
       Onclick=Showmap
      END CREATE

      CREATE Btnfont AS QBUTTON
       CAPTION="Font":Font=Fontb:Taborder=5
       Left=Txtin.Left:Top=70
       Width=65:Height=25
       Onclick=Getfont
       Visible=0
      END CREATE

      CREATE Txtfont AS QEDIT
       Text="MS Sans Serif":Font=Fontb:Taborder=6
       Left=Btnfont.Left + Btnfont.Width + 5:Top=Btnfont.Top
       Width=150:Height=25
       Readonly=1:Visible=0
      END CREATE

      CREATE Txtpreview AS QRICHEDIT
       Font=Fonta:Taborder=6:Alignment=2
       Left=255:Top=4
       Width=75:Height=105
       Visible=0:Text="A"
      END CREATE

      CREATE Txtedit AS QRICHEDIT
       Font=Fonta
       Addstrings "ABCDEFGHIJKLMNOPQRSTUVWXYZ",_
        "abcdefghijklmnopqrstuvwxyz",_
        "01234567890!@#$%^&*()_+{}][:"":><<>?/"
       Left=Txtpreview.Left + Txtpreview.Width + 10:Top=Txtpreview.Top
       Height=105:Scrollbars=3:Width=450''495:
       Visible=0
      END CREATE

      CREATE Groupbox AS QGROUPBOX
       CAPTION = ""
       Left = 0:Top = 264:Width = 790
       Height = 220:Align = 2
       Visible=0
      END CREATE

     END CREATE

'==== Build Array() Of 256 Buttons  =======
     X=0
     Fonta.Size=12
     DIM Btnary(256) AS QCOOLBTN
     FOR R=0 TO 7
      FOR C=0 TO 31
       Btnary(X).PARENT=Groupbox
       Btnary(X).Enabled=1
       Btnary(X).CAPTION=CHR$(X)
       Btnary(X).Flat=1
       Btnary(X).Width=24
       Btnary(X).Height=26
       Btnary(X).Font=Fonta
       Btnary(X).Top=R * 26 + 10
       Btnary(X).Left=C * 26 + 10
       Btnary(X).Onclick=Showpreview
       Btnary(X).Hint="Alt + 0" & STR$(X)
       Btnary(X).Showhint=1
       INC X
      NEXT
     NEXT
     Btnary(38).CAPTION="&&"	  'Workaround
     Fonta.Size=38
     Txtpreview.Font=Fonta
     Fonta.Size=12

     Form.SHOWMODAL

     SUB Do_Keys(Key AS WORD,Shift AS INTEGER)
      DOEVENTS
      Txtkey.Text=STR$(Key)
      IF LEN(Txtin.Text)>0 THEN
       Txtasc.Text=STR$(ASC(Txtin.Text))
       Btnary(Last).Flat=1
       Btnary(ASC(Txtin.Text)).Flat=0
       Txtpreview.Text=Btnary(ASC(Txtin.Text)).CAPTION
       Last=ASC(Txtin.Text)
      ELSE
       Txtasc.Text=""
       Txtpreview.Text=""
      END IF
      DOEVENTS
     END SUB

     SUB Checkfield
      IF LEN(Txtin.Text)>0 THEN
       Txtin.Text=""
      END IF
      DOEVENTS
     END SUB

     SUB Showmap
      IF Map THEN
       Map=0
       Txtfont.Visible=0
       Btnfont.Visible=0
       Groupbox.Visible=0   ' Hides All Buttons In Groupbox
       Txtpreview.Visible=0
       Txtedit.Visible=0
       Form.Width=260:Form.Height=100
       Btnmap.CAPTION="Map>"
      ELSE
       Map=1
       Form.Clientheight=335
       Form.Clientwidth=840
       Txtfont.Visible=1
       Btnfont.Visible=1
       Groupbox.Visible=1   ' Shows All Buttons In Groupbox
       Txtpreview.Visible=1
       Txtedit.Visible=1
       Btnmap.CAPTION="<Map"
      END IF
      Qsetfocus(Txtin.Handle)  ' Go Back Here To Be Ready For More Key Input
      DOEVENTS
     END SUB

     SUB Getfont
      Fontdialog.Getfont(Fonta)
      IF Fontdialog.EXECUTE THEN
       Txtfont.Text=Fontdialog.Name
       Fontdialog.Setfont(Fonta)
       Fs=Fonta.Size
       FOR X=0 TO 255:Btnary(X).Font=Fonta:NEXT   ' Change Font Style On All Buttons!
        Txtedit.Font=Fonta:Fonta.Size=12:Txtin.Font=Fonta
        Fonta.Size=48
        Txtpreview.Font=Fonta
        Fonta.Size=Fs
       END IF
       Qsetfocus(Txtin.Handle)  ' Go Back Here To Be Ready For More Key Input
       DOEVENTS
      END SUB

      SUB Showpreview(Sender AS QCOOLBTN)
       Btnary(Last).Flat=1
       Txtpreview.Text=Sender.CAPTION
       Txtin.Text=Sender.CAPTION
       Btnary(ASC(Txtin.Text)).Flat=0
       Last=ASC(Txtin.Text)
       Txtasc.Text=STR$(ASC(Sender.CAPTION ))
       Txtkey.Text=""
       Qsetfocus(Txtin.Handle)  ' Go Back Here To Be Ready For More Key Input
       DOEVENTS
      END SUB

      SUB Showmouse
       Lblmouse.CAPTION=STR$(MOUSEX) & ":" & STR$(MOUSEY)
      END SUB

      SUB Dummyproc   ' To Minimize Properly
      END SUB

      SUB Closemain
       Application.Terminate
      END SUB

'============ END
