Virtual Keyboard, binding interface module

Author : Graph100
Current version : 0.1.60
Date of creation : 2014-02-18 06:10:08
Date of last version : 2014-02-20 01:19:05
Compatible with : Windows
Compile on : PureBasic only
Basic version used : PureBasic 5.21 LTS
Category : Interfaces, Graphics engine,
Description : - Draw a virtual keyboard on the current drawing surface
- Possibility to draw the pushed key like the exemple shows

-> COMPILE with the THREAD compatibility option ON
  1.  
  2. ;{######################################
  3. ; Programme :           Virtual Keyboard Key display (for choosing binding purpose)
  4. #VERSION = "0.01.0060"
  5. ;      
  6. ; Description :        
  7. ;                                                                       - Draw a virtual keyboard on the current drawing surface
  8. ;                                                                       - Possibility to draw the pushed key like the exemple shows
  9. ;                                                                      
  10. ; TODOs done :
  11. ;                                                                       - Code layout
  12. ;                                                                       - Default keyboard in datasection
  13. ;                                                                       - loading custom keyboard file (you must write them ;)
  14. ;                                                                       - working exemple
  15. ;                                                                      
  16. ;       TODOs :
  17. ;                                                                      
  18. ;                                                                      
  19. ;       Recommendation :       
  20. ;                                                                       - !!!!!  Activate Threads Supports / Activer le support des Threads !!!!!
  21. ;                                                                      
  22. ;       PB version :   
  23. ;                                                                       - Writen on 5.21 LTS x86 window
  24. ;                                                                      
  25. ; Author : graph100 alias Kriek106
  26. ;}######################################
  27.  
  28.  
  29. ;{ Compatibility Linux / Mac OS, I left it, even if the core program does not work well on Mac and Linux
  30.  
  31. CompilerIf Not Defined(POINT,#PB_Structure)
  32.         Structure POINT
  33.                 x.i
  34.                 y.i
  35.         EndStructure
  36. CompilerEndIf
  37.  
  38. CompilerIf Not Defined(RECT,#PB_Structure)
  39.         Structure RECT
  40.                 left.l
  41.                 top.l
  42.                 right.l
  43.                 bottom.l
  44.         EndStructure
  45. CompilerEndIf
  46.  
  47. CompilerIf Not Defined(Red,#PB_Constant)
  48.         #Red = $0000FF
  49. CompilerEndIf
  50.  
  51. CompilerIf Not Defined(White,#PB_Constant)
  52.         #White = $FFFFFF
  53. CompilerEndIf
  54.  
  55.  
  56. ;}
  57.  
  58.  
  59. ;{ structure
  60.  
  61.  
  62. Structure KD_key_text
  63.         text.s
  64.        
  65.         pos.POINT
  66.        
  67.         taille.d
  68. EndStructure
  69.  
  70. Structure KD_Key
  71.         rayon.l
  72.        
  73.         Key.RECT
  74.         Name.s
  75.        
  76.         List Text.KD_key_text()
  77.        
  78.         ImageNum.l
  79.         Imagepos.POINT
  80.        
  81.         ID.l
  82.        
  83.         color.l
  84. EndStructure
  85.  
  86.  
  87. Structure KD_Keyboard
  88.         offset.POINT
  89.        
  90.         Map key.KD_Key()
  91.        
  92.         Map font.l()
  93. EndStructure
  94.  
  95.  
  96. Structure IKD_loadFont
  97.         size.l
  98.         *Map_elem.Long
  99. EndStructure
  100.  
  101.  
  102. ;}
  103.  
  104.  
  105. ;{ procedure
  106.  
  107. Procedure.i KD_LoadKeyboard(Keyboard_file.s = "")
  108.         *keyboard.KD_Keyboard = AllocateMemory(SizeOf(KD_Keyboard))
  109.         InitializeStructure(*keyboard, KD_Keyboard)
  110.        
  111.         res = ReadFile(#PB_Any, Keyboard_file)
  112.         If res 
  113.                 ;{ chargement d'un fichier
  114.                
  115.                 ; le format d'un fichier est identique à la différence que tout doit être écrit en texte, suivi par des retours à la ligne
  116.                
  117.                 *keyboard\offset\x = Val(ReadString(res))
  118.                 *keyboard\offset\y = Val(ReadString(res))
  119.                
  120.                 Repeat
  121.                         id = Val(ReadString(res))
  122.                        
  123.                         If id = 13 And FindMapElement(*keyboard\key(), "13")
  124.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "13r")
  125.                         ElseIf id = 16 And FindMapElement(*keyboard\key(), "16")
  126.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "16r")
  127.                         ElseIf id = 17 And FindMapElement(*keyboard\key(), "17")
  128.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "17r")
  129.                         ElseIf id = 18 And FindMapElement(*keyboard\key(), "18")
  130.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "18r")
  131.                         Else
  132.                                 *key.KD_Key = AddMapElement(*keyboard\key(), Str(id))
  133.                         EndIf
  134.                        
  135.                        
  136.                         *key\ID = id
  137.                        
  138.                         InitializeStructure(*key, KD_Key)
  139.                        
  140.                         *key\rayon = Val(ReadString(res))
  141.                         *key\Key\left = Val(ReadString(res))
  142.                         *key\Key\top = Val(ReadString(res))
  143.                         *key\Key\right = *key\Key\left + Val(ReadString(res))
  144.                         *key\Key\bottom = *key\Key\top + Val(ReadString(res))
  145.                        
  146.                         *key\Name = ReadString(res)
  147.                        
  148.                         nb = Val(ReadString(res))
  149.                        
  150.                         For j = 1 To nb
  151.                                 AddElement(*key\Text())
  152.                                
  153.                                 *key\Text()\text = ReadString(res)
  154.                                
  155.                                 *key\Text()\pos\x = Val(ReadString(res))
  156.                                 *key\Text()\pos\y = Val(ReadString(res))
  157.                                 *key\Text()\taille = Val(ReadString(res))
  158.                                
  159.                                 If FindMapElement(*keyboard\font(), Str(*key\Text()\taille)) = 0
  160.                                         *keyboard\font(Str(*key\Text()\taille)) = LoadFont(#PB_Any, "Arial", *key\Text()\taille)
  161.                                 EndIf
  162.                         Next
  163.                        
  164.                         Debug Loc(res)
  165.                        
  166.                 Until Eof(res)
  167.                
  168.                 ;}
  169.                
  170.                 CloseFile(res)
  171.         Else
  172.                 ;{ chargement depuis une datasection
  173.                
  174.                 *keyboard\offset\x = PeekL(?KD_Default_keyboard)
  175.                 *keyboard\offset\y = PeekL(?KD_Default_keyboard + 4)
  176.                
  177.                 *pt = ?KD_Default_keyboard + 8
  178.                
  179.                 Repeat
  180.                         If PeekL(*pt) = 13 And FindMapElement(*keyboard\key(), "13")
  181.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "13r")
  182.                         ElseIf PeekL(*pt) = 16 And FindMapElement(*keyboard\key(), "16")
  183.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "16r")
  184.                         ElseIf PeekL(*pt) = 17 And FindMapElement(*keyboard\key(), "17")
  185.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "17r")
  186.                         ElseIf PeekL(*pt) = 18 And FindMapElement(*keyboard\key(), "18")
  187.                                 *key.KD_Key = AddMapElement(*keyboard\key(), "18r")
  188.                         Else
  189.                                 *key.KD_Key = AddMapElement(*keyboard\key(), Str(PeekL(*pt)))
  190.                         EndIf
  191.                        
  192.                        
  193.                         *key\ID = PeekL(*pt)
  194.                         *pt + 4
  195.                        
  196.                         InitializeStructure(*key, KD_Key)
  197.                        
  198.                         *key\rayon = PeekL(*pt)
  199.                         *key\Key\left = PeekL(*pt + 4)
  200.                         *key\Key\top = PeekL(*pt + 8)
  201.                         *key\Key\right = *key\Key\left + PeekL(*pt + 12)
  202.                         *key\Key\bottom = *key\Key\top + PeekL(*pt + 16)
  203.                        
  204.                         *key\Name = PeekS(*pt + 20)
  205.                        
  206.                         *pt = *pt + 20 + Len(*key\Name + 1) * SizeOf(Character)
  207.                        
  208.                         nb = PeekL(*pt)
  209.                        
  210.                         *pt + 4
  211.                         For j = 1 To nb
  212.                                 AddElement(*key\Text())
  213.                                
  214.                                 *key\Text()\text = PeekS(*pt)
  215.                                
  216.                                 *pt = *pt + Len(*key\Text()\text + 1) * SizeOf(Character)
  217.                                
  218.                                 *key\Text()\pos\x = PeekL(*pt)
  219.                                 *key\Text()\pos\y = PeekL(*pt + 4)
  220.                                 *key\Text()\taille = PeekL(*pt + 8)
  221.                                
  222.                                 If FindMapElement(*keyboard\font(), Str(*key\Text()\taille)) = 0
  223.                                         *keyboard\font(Str(*key\Text()\taille)) = LoadFont(#PB_Any, "Arial", *key\Text()\taille)
  224.                                 EndIf
  225.                                
  226.                                 *pt + 12
  227.                         Next
  228.                        
  229.                 Until *pt >= ?KD_Default_keyboard_end
  230.                
  231.                 ;}
  232.         EndIf
  233.        
  234.         ProcedureReturn *keyboard
  235. EndProcedure
  236.  
  237.  
  238. Procedure IKD_Thread_LoadFont(*adr.IKD_loadFont)
  239.         *adr\Map_elem\l = LoadFont(#PB_Any, "Arial", *adr\size)
  240. EndProcedure
  241.  
  242.  
  243. Procedure KD_DrawKey(*keyboard.KD_Keyboard, *touche.KD_Key, *offset.POINT, scale_factor.d, Selected = #False)
  244.         Protected left_top.POINT, x.l, y.l, font_size.l, tmp.IKD_loadFont
  245.        
  246.         DrawingMode(#PB_2DDrawing_Default)
  247.        
  248.         left_top\x = *touche\Key\left + *offset\x
  249.         left_top\y = *touche\Key\top + *offset\y
  250.        
  251.         If Selected
  252.                 RoundBox((left_top\x - 8) * scale_factor, (left_top\y - 8) * scale_factor, (*touche\Key\right - *touche\Key\left + 16) * scale_factor, (*touche\Key\bottom - *touche\Key\top + 16) * scale_factor, *touche\rayon * scale_factor, *touche\rayon * scale_factor, #Red)
  253.         EndIf
  254.        
  255.         RoundBox(left_top\x * scale_factor, left_top\y * scale_factor, (*touche\Key\right - *touche\Key\left) * scale_factor, (*touche\Key\bottom - *touche\Key\top) * scale_factor, *touche\rayon * scale_factor, *touche\rayon * scale_factor, *touche\color)
  256.        
  257.         If IsImage(*touche\ImageNum)
  258.                 DrawingMode(#PB_2DDrawing_AlphaBlend)
  259.                
  260.                 DrawImage(ImageID(*touche\ImageNum), (*touche\Imagepos\x + left_top\x) * scale_factor, (*touche\Imagepos\y + left_top\y) * scale_factor, ImageWidth(*touche\ImageNum) * scale_factor, ImageHeight(*touche\ImageNum) * scale_factor)
  261.                
  262.         Else
  263.                 DrawingMode(#PB_2DDrawing_Transparent)
  264.                
  265.                 ForEach *touche\Text()
  266.                         font_size = scale_factor * *touche\Text()\taille
  267.                         If FindMapElement(*keyboard\font(), Str(font_size)) = 0
  268.                                 tmp\Map_elem = AddMapElement(*keyboard\font(), Str(font_size))
  269.                                 tmp\size = font_size
  270.                                
  271.                                 WaitThread(CreateThread(@IKD_Thread_LoadFont(), @tmp))
  272.                         EndIf
  273.                        
  274.                         DrawingFont(FontID(*keyboard\font()))
  275.                        
  276.                         If *touche\Text()\pos\x = -1
  277.                                 x = left_top\x * scale_factor + ((*touche\Key\right - *touche\Key\left) * scale_factor - TextWidth(*touche\Text()\text)) / 2
  278.                                 y = left_top\y * scale_factor + ((*touche\Key\bottom - *touche\Key\top) * scale_factor - TextHeight(*touche\Text()\text)) / 2
  279.                                
  280.                                 DrawText(x, y, *touche\Text()\text, #White)
  281.                         Else
  282.                                 DrawText((*touche\Text()\pos\x + left_top\x) * scale_factor, (*touche\Text()\pos\y + left_top\y) * scale_factor, *touche\Text()\text, #White)
  283.                         EndIf
  284.                 Next
  285.         EndIf
  286. EndProcedure
  287.  
  288.  
  289. Procedure KD_DrawKeyboard(*keyboard.KD_Keyboard, scale_factor.d)
  290.         If *keyboard = 0
  291.                 ProcedureReturn
  292.         EndIf
  293.        
  294.         ForEach *keyboard\key()
  295.                 KD_DrawKey(*keyboard, *keyboard\key(), *keyboard\offset, scale_factor)
  296.         Next
  297. EndProcedure
  298.  
  299. Procedure KD_DrawSelectedKeyboard(*keyboard.KD_Keyboard, scale_factor.d, Map KeyDown.l())
  300.         If *keyboard = 0
  301.                 ProcedureReturn
  302.         EndIf
  303.        
  304.         ForEach *keyboard\key()
  305.                 If FindMapElement(KeyDown(), Str(Val(MapKey(*keyboard\key()))))
  306.                         KD_DrawKey(*keyboard, *keyboard\key(), *keyboard\offset, scale_factor, #True)
  307.                 Else
  308.                         KD_DrawKey(*keyboard, *keyboard\key(), *keyboard\offset, scale_factor)
  309.                 EndIf
  310.         Next
  311. EndProcedure
  312.  
  313.  
  314. ;}
  315.  
  316.  
  317. ;{ Default Keyboard DATA
  318.  
  319. DataSection
  320.         KD_Default_keyboard:
  321.        
  322.         ; offset : x, y
  323.         Data.l -15, 0
  324.        
  325.         ; Key DATA
  326.        
  327.         ;{ echap, F1 - F12, pause, impécr, suppr
  328.        
  329.         ; ECHAP (exemple)
  330.         ; ID
  331.         Data.l #PB_Shortcut_Escape
  332.         ; rayon
  333.         Data.l 10
  334.         ; Rect : left, top, rigth, bottom
  335.         Data.l 90, 55, 105, 65
  336.         ; Name
  337.         Data.s "Echap"
  338.         ; Text() : nb
  339.         Data.l 1
  340.         ; element : nom, x(-1 to center text), y, size
  341.         Data.s "echap"
  342.         Data.l -1, 0, 22
  343.        
  344.         ; F1
  345.         Data.l #PB_Shortcut_F1
  346.         Data.l 10
  347.         Data.l 235, 55, 93, 65
  348.         Data.s "F1"
  349.         Data.l 1
  350.         Data.s "F1"
  351.         Data.l -1, 0, 15
  352.        
  353.         ; F2
  354.         Data.l #PB_Shortcut_F2
  355.         Data.l 10
  356.         Data.l 353, 55, 93, 65
  357.         Data.s "F2"
  358.         Data.l 1
  359.         Data.s "F2"
  360.         Data.l -1, 0, 15
  361.        
  362.         ; F3
  363.         Data.l #PB_Shortcut_F3
  364.         Data.l 10
  365.         Data.l 471, 55, 93, 65
  366.         Data.s "F3"
  367.         Data.l 1
  368.         Data.s "F3"
  369.         Data.l -1, 0, 15
  370.        
  371.         ; F4
  372.         Data.l #PB_Shortcut_F4
  373.         Data.l 10
  374.         Data.l 589, 55, 93, 65
  375.         Data.s "F4"
  376.         Data.l 1
  377.         Data.s "F4"
  378.         Data.l -1, 0, 15
  379.        
  380.         ; F5
  381.         Data.l #PB_Shortcut_F5
  382.         Data.l 10
  383.         Data.l 707, 55, 93, 65
  384.         Data.s "F5"
  385.         Data.l 1
  386.         Data.s "F5"
  387.         Data.l -1, 0, 15
  388.        
  389.         ; F6
  390.         Data.l #PB_Shortcut_F6
  391.         Data.l 10
  392.         Data.l 825, 55, 93, 65
  393.         Data.s "F6"
  394.         Data.l 1
  395.         Data.s "F6"
  396.         Data.l -1, 0, 15
  397.        
  398.         ; F7
  399.         Data.l #PB_Shortcut_F7
  400.         Data.l 10
  401.         Data.l 943, 55, 93, 65
  402.         Data.s "F7"
  403.         Data.l 1
  404.         Data.s "F7"
  405.         Data.l -1, 0, 15
  406.        
  407.         ; F8
  408.         Data.l #PB_Shortcut_F8
  409.         Data.l 10
  410.         Data.l 1061, 55, 93, 65
  411.         Data.s "F8"
  412.         Data.l 1
  413.         Data.s "F8"
  414.         Data.l -1, 0, 15
  415.        
  416.         ; F9
  417.         Data.l #PB_Shortcut_F9
  418.         Data.l 10
  419.         Data.l 1179, 55, 93, 65
  420.         Data.s "F9"
  421.         Data.l 1
  422.         Data.s "F9"
  423.         Data.l -1, 0, 15
  424.        
  425.         ; F10
  426.         Data.l #PB_Shortcut_F10
  427.         Data.l 10
  428.         Data.l 1297, 55, 93, 65
  429.         Data.s "F10"
  430.         Data.l 1
  431.         Data.s "F10"
  432.         Data.l -1, 0, 15
  433.        
  434.         ; F11
  435.         Data.l #PB_Shortcut_F11
  436.         Data.l 10
  437.         Data.l 1415, 55, 93, 65
  438.         Data.s "F11"
  439.         Data.l 1
  440.         Data.s "F11"
  441.         Data.l -1, 0, 15
  442.        
  443.         ; F12
  444.         Data.l #PB_Shortcut_F12
  445.         Data.l 10
  446.         Data.l 1533, 55, 93, 65
  447.         Data.s "F12"
  448.         Data.l 1
  449.         Data.s "F12"
  450.         Data.l -1, 0, 15
  451.        
  452.         ; pause
  453.         Data.l #PB_Shortcut_Pause
  454.         Data.l 10
  455.         Data.l 1651, 55, 93, 65
  456.         Data.s "Pause"
  457.         Data.l 1
  458.         Data.s "pause"
  459.         Data.l -1, 0, 18
  460.        
  461.         ; impécr
  462.         Data.l #PB_Shortcut_Snapshot
  463.         Data.l 10
  464.         Data.l 1769, 55, 93, 65
  465.         Data.s "Imprime Ecran"
  466.         Data.l 1
  467.         Data.s "impécr"
  468.         Data.l -1, 0, 18
  469.        
  470.         ; suppr
  471.         Data.l #PB_Shortcut_Delete
  472.         Data.l 10
  473.         Data.l 1887, 55, 93, 65
  474.         Data.s "Imprime Ecran"
  475.         Data.l 1
  476.         Data.s "suppr"
  477.         Data.l -1, 0, 18
  478.        
  479.         ;}
  480.        
  481.         ;{ ², 1 - 9, 0, ), =, backspace
  482.        
  483.         ; ²
  484.         Data.l 222
  485.         Data.l 10
  486.         Data.l 90, 155, 105, 105
  487.         Data.s "²"
  488.         Data.l 1
  489.         Data.s "2"
  490.         Data.l -1, 0, 22
  491.        
  492.         ; &
  493.         Data.l #PB_Shortcut_1
  494.         Data.l 10
  495.         Data.l 220, 155, 105, 105
  496.         Data.s "&"
  497.         Data.l 2
  498.         Data.s "&"
  499.         Data.l -1, 0, 22
  500.         Data.s "1"
  501.         Data.l 5, 5, 22
  502.        
  503.         ; é
  504.         Data.l #PB_Shortcut_2
  505.         Data.l 10
  506.         Data.l 350, 155, 105, 105
  507.         Data.s "é"
  508.         Data.l 2
  509.         Data.s "é"
  510.         Data.l -1, 0, 22
  511.         Data.s "2"
  512.         Data.l 5, 5, 22
  513.        
  514.         ; "
  515.         Data.l #PB_Shortcut_3
  516.         Data.l 10
  517.         Data.l 480, 155, 105, 105
  518.         Data.s #DQUOTE$
  519.         Data.l 2
  520.         Data.s #DQUOTE$
  521.         Data.l -1, 0, 22
  522.         Data.s "3"
  523.         Data.l 5, 5, 22
  524.        
  525.         ; '
  526.         Data.l #PB_Shortcut_4
  527.         Data.l 10
  528.         Data.l 610, 155, 105, 105
  529.         Data.s "'"
  530.         Data.l 2
  531.         Data.s "'"
  532.         Data.l -1, 0, 22
  533.         Data.s "4"
  534.         Data.l 5, 5, 22
  535.        
  536.         ; (
  537.         Data.l #PB_Shortcut_5
  538.         Data.l 10
  539.         Data.l 740, 155, 105, 105
  540.         Data.s "("
  541.         Data.l 2
  542.         Data.s "("
  543.         Data.l -1, 0, 22
  544.         Data.s "5"
  545.         Data.l 5, 5, 22
  546.        
  547.         ; -
  548.         Data.l #PB_Shortcut_6
  549.         Data.l 10
  550.         Data.l 870, 155, 105, 105
  551.         Data.s "-"
  552.         Data.l 2
  553.         Data.s "-"
  554.         Data.l -1, 0, 22
  555.         Data.s "6"
  556.         Data.l 5, 5, 22
  557.        
  558.         ; è
  559.         Data.l #PB_Shortcut_7
  560.         Data.l 10
  561.         Data.l 1000, 155, 105, 105
  562.         Data.s "è"
  563.         Data.l 2
  564.         Data.s "è"
  565.         Data.l -1, 0, 22
  566.         Data.s "7"
  567.         Data.l 5, 5, 22
  568.        
  569.         ; _
  570.         Data.l #PB_Shortcut_8
  571.         Data.l 10
  572.         Data.l 1130, 155, 105, 105
  573.         Data.s "_"
  574.         Data.l 2
  575.         Data.s "_"
  576.         Data.l -1, 0, 22
  577.         Data.s "8"
  578.         Data.l 5, 5, 22
  579.        
  580.         ; ç
  581.         Data.l #PB_Shortcut_9
  582.         Data.l 10
  583.         Data.l 1260, 155, 105, 105
  584.         Data.s "ç"
  585.         Data.l 2
  586.         Data.s "ç"
  587.         Data.l -1, 0, 22
  588.         Data.s "9"
  589.         Data.l 5, 5, 22
  590.        
  591.         ; à
  592.         Data.l #PB_Shortcut_0
  593.         Data.l 10
  594.         Data.l 1390, 155, 105, 105
  595.         Data.s "à"
  596.         Data.l 2
  597.         Data.s "à"
  598.         Data.l -1, 0, 22
  599.         Data.s "0"
  600.         Data.l 5, 5, 22
  601.        
  602.         ; )
  603.         Data.l 219
  604.         Data.l 10
  605.         Data.l 1520, 155, 105, 105
  606.         Data.s ")"
  607.         Data.l 2
  608.         Data.s ")"
  609.         Data.l -1, 0, 22
  610.         Data.s "°"
  611.         Data.l 5, 5, 22
  612.        
  613.         ; =
  614.         Data.l 187
  615.         Data.l 10
  616.         Data.l 1650, 155, 105, 105
  617.         Data.s "="
  618.         Data.l 2
  619.         Data.s "="
  620.         Data.l -1, 0, 22
  621.         Data.s "+"
  622.         Data.l 5, 5, 22
  623.        
  624.         ; backspace
  625.         Data.l #PB_Shortcut_Back
  626.         Data.l 10
  627.         Data.l 1780, 155, 200, 105
  628.         Data.s "Delete"
  629.         Data.l 1
  630.         Data.s "Delete"
  631.         Data.l -1, 0, 22
  632.        
  633.         ;}
  634.        
  635.         ;{ Tab, A - P, ^, $, return
  636.        
  637.         ; tab
  638.         Data.l #PB_Shortcut_Tab
  639.         Data.l 10
  640.         Data.l 90, 280, 160, 105
  641.         Data.s "Tab"
  642.         Data.l 1
  643.         Data.s "Tab"
  644.         Data.l -1, 0, 22
  645.        
  646.         ; A
  647.         Data.l #PB_Shortcut_A
  648.         Data.l 10
  649.         Data.l 280, 280, 105, 105
  650.         Data.s "A"
  651.         Data.l 1
  652.         Data.s "A"
  653.         Data.l -1, 0, 30
  654.        
  655.         ; Z
  656.         Data.l #PB_Shortcut_Z
  657.         Data.l 10
  658.         Data.l 410, 280, 105, 105
  659.         Data.s "Z"
  660.         Data.l 1
  661.         Data.s "Z"
  662.         Data.l -1, 0, 30
  663.        
  664.         ; E
  665.         Data.l #PB_Shortcut_E
  666.         Data.l 10
  667.         Data.l 540, 280, 105, 105
  668.         Data.s "E"
  669.         Data.l 1
  670.         Data.s "E"
  671.         Data.l -1, 0, 30
  672.        
  673.         ; R
  674.         Data.l #PB_Shortcut_R
  675.         Data.l 10
  676.         Data.l 670, 280, 105, 105
  677.         Data.s "R"
  678.         Data.l 1
  679.         Data.s "R"
  680.         Data.l -1, 0, 30
  681.        
  682.         ; T
  683.         Data.l #PB_Shortcut_T
  684.         Data.l 10
  685.         Data.l 800, 280, 105, 105
  686.         Data.s "T"
  687.         Data.l 1
  688.         Data.s "T"
  689.         Data.l -1, 0, 30
  690.        
  691.         ; Y
  692.         Data.l #PB_Shortcut_Y
  693.         Data.l 10
  694.         Data.l 930, 280, 105, 105
  695.         Data.s "Y"
  696.         Data.l 1
  697.         Data.s "Y"
  698.         Data.l -1, 0, 30
  699.        
  700.         ; U
  701.         Data.l #PB_Shortcut_U
  702.         Data.l 10
  703.         Data.l 1060, 280, 105, 105
  704.         Data.s "U"
  705.         Data.l 1
  706.         Data.s "U"
  707.         Data.l -1, 0, 30
  708.        
  709.         ; I
  710.         Data.l #PB_Shortcut_I
  711.         Data.l 10
  712.         Data.l 1190, 280, 105, 105
  713.         Data.s "I"
  714.         Data.l 1
  715.         Data.s "I"
  716.         Data.l -1, 0, 30
  717.        
  718.         ; O
  719.         Data.l #PB_Shortcut_O
  720.         Data.l 10
  721.         Data.l 1320, 280, 105, 105
  722.         Data.s "O"
  723.         Data.l 1
  724.         Data.s "O"
  725.         Data.l -1, 0, 30
  726.        
  727.         ; P
  728.         Data.l #PB_Shortcut_P
  729.         Data.l 10
  730.         Data.l 1450, 280, 105, 105
  731.         Data.s "P"
  732.         Data.l 1
  733.         Data.s "P"
  734.         Data.l -1, 0, 30
  735.        
  736.         ; ^
  737.         Data.l 221
  738.         Data.l 10
  739.         Data.l 1580, 280, 105, 105
  740.         Data.s "^"
  741.         Data.l 2
  742.         Data.s "^"
  743.         Data.l -1, 0, 30
  744.         Data.s "¨"
  745.         Data.l 5, 5, 22
  746.        
  747.         ; $
  748.         Data.l 186
  749.         Data.l 10
  750.         Data.l 1710, 280, 105, 105
  751.         Data.s "$"
  752.         Data.l 2
  753.         Data.s "$"
  754.         Data.l -1, 0, 30
  755.         Data.s "£"
  756.         Data.l 5, 5, 22
  757.        
  758.        
  759.         ; Retour à la ligne
  760.         Data.l #PB_Shortcut_Return
  761.         Data.l 10
  762.         Data.l 1875, 280, 105, 210+20
  763.         Data.s "Retour Chariot"
  764.         Data.l 1
  765.         Data.s "Return"
  766.         Data.l -1, 0, 22
  767.        
  768.         ;}
  769.        
  770.         ;{ MAj, Q - M, ù, *
  771.        
  772.         ; maj
  773.         Data.l #PB_Shortcut_Capital
  774.         Data.l 10
  775.         Data.l 90, 405, 200, 105
  776.         Data.s "MAJ"
  777.         Data.l 1
  778.         Data.s "MAJ"
  779.         Data.l -1, 0, 22
  780.        
  781.         ; Q
  782.         Data.l #PB_Shortcut_Q
  783.         Data.l 10
  784.         Data.l 315, 405, 105, 105
  785.         Data.s "Q"
  786.         Data.l 1
  787.         Data.s "Q"
  788.         Data.l -1, 0, 30
  789.        
  790.         ; S
  791.         Data.l #PB_Shortcut_S
  792.         Data.l 10
  793.         Data.l 445, 405, 105, 105
  794.         Data.s "S"
  795.         Data.l 1
  796.         Data.s "S"
  797.         Data.l -1, 0, 30
  798.        
  799.         ; D
  800.         Data.l #PB_Shortcut_D
  801.         Data.l 10
  802.         Data.l 575, 405, 105, 105
  803.         Data.s "D"
  804.         Data.l 1
  805.         Data.s "D"
  806.         Data.l -1, 0, 30
  807.        
  808.         ; F
  809.         Data.l #PB_Shortcut_F
  810.         Data.l 10
  811.         Data.l 705, 405, 105, 105
  812.         Data.s "F"
  813.         Data.l 1
  814.         Data.s "F"
  815.         Data.l -1, 0, 30
  816.        
  817.         ; G
  818.         Data.l #PB_Shortcut_G
  819.         Data.l 10
  820.         Data.l 835, 405, 105, 105
  821.         Data.s "G"
  822.         Data.l 1
  823.         Data.s "G"
  824.         Data.l -1, 0, 30
  825.        
  826.         ; H
  827.         Data.l #PB_Shortcut_H
  828.         Data.l 10
  829.         Data.l 965, 405, 105, 105
  830.         Data.s "H"
  831.         Data.l 1
  832.         Data.s "H"
  833.         Data.l -1, 0, 30
  834.        
  835.         ; J
  836.         Data.l #PB_Shortcut_J
  837.         Data.l 10
  838.         Data.l 1095, 405, 105, 105
  839.         Data.s "J"
  840.         Data.l 1
  841.         Data.s "J"
  842.         Data.l -1, 0, 30
  843.        
  844.         ; K
  845.         Data.l #PB_Shortcut_K
  846.         Data.l 10
  847.         Data.l 1225, 405, 105, 105
  848.         Data.s "K"
  849.         Data.l 1
  850.         Data.s "K"
  851.         Data.l -1, 0, 30
  852.        
  853.         ; L
  854.         Data.l #PB_Shortcut_L
  855.         Data.l 10
  856.         Data.l 1355, 405, 105, 105
  857.         Data.s "L"
  858.         Data.l 1
  859.         Data.s "L"
  860.         Data.l -1, 0, 30
  861.        
  862.         ; M
  863.         Data.l #PB_Shortcut_M
  864.         Data.l 10
  865.         Data.l 1485, 405, 105, 105
  866.         Data.s "M"
  867.         Data.l 1
  868.         Data.s "M"
  869.         Data.l -1, 0, 30
  870.        
  871.         ; ù
  872.         Data.l 192
  873.         Data.l 10
  874.         Data.l 1615, 405, 105, 105
  875.         Data.s "ù"
  876.         Data.l 2
  877.         Data.s "Ù"
  878.         Data.l -1, 0, 22
  879.         Data.s "%"
  880.         Data.l 5, 5, 22
  881.        
  882.         ; *
  883.         Data.l 220
  884.         Data.l 10
  885.         Data.l 1745, 405, 105, 105
  886.         Data.s "µ*"
  887.         Data.l 2
  888.         Data.s "*"
  889.         Data.l -1, 0, 30
  890.         Data.s "µ"
  891.         Data.l 5, 5, 22
  892.        
  893.         ;}
  894.        
  895.         ;{ Left Shift, <, W, N, , ; : ! Rigth Shift
  896.        
  897.         ; Left Shift
  898.         Data.l 16
  899.         Data.l 10
  900.         Data.l 90, 530, 125, 105
  901.         Data.s "Left Shift"
  902.         Data.l 1
  903.         Data.s "Shift"
  904.         Data.l -1, 0, 22
  905.        
  906.         ; <
  907.         Data.l 226
  908.         Data.l 10
  909.         Data.l 240, 530, 105, 105
  910.         Data.s "<"
  911.         Data.l 2
  912.         Data.s "<"
  913.         Data.l -1, 0, 30
  914.         Data.s ">"
  915.         Data.l 5, 5, 22
  916.        
  917.         ; W
  918.         Data.l #PB_Shortcut_W
  919.         Data.l 10
  920.         Data.l 370, 530, 105, 105
  921.         Data.s "W"
  922.         Data.l 1
  923.         Data.s "W"
  924.         Data.l -1, 0, 30
  925.        
  926.         ; X
  927.         Data.l #PB_Shortcut_X
  928.         Data.l 10
  929.         Data.l 500, 530, 105, 105
  930.         Data.s "X"
  931.         Data.l 1
  932.         Data.s "X"
  933.         Data.l -1, 0, 30
  934.        
  935.         ; C
  936.         Data.l #PB_Shortcut_C
  937.         Data.l 10
  938.         Data.l 630, 530, 105, 105
  939.         Data.s "C"
  940.         Data.l 1
  941.         Data.s "C"
  942.         Data.l -1, 0, 30
  943.        
  944.         ; V
  945.         Data.l #PB_Shortcut_V
  946.         Data.l 10
  947.         Data.l 760, 530, 105, 105
  948.         Data.s "V"
  949.         Data.l 1
  950.         Data.s "V"
  951.         Data.l -1, 0, 30
  952.        
  953.         ; B
  954.         Data.l #PB_Shortcut_B
  955.         Data.l 10
  956.         Data.l 890, 530, 105, 105
  957.         Data.s "B"
  958.         Data.l 1
  959.         Data.s "B"
  960.         Data.l -1, 0, 30
  961.        
  962.         ; N
  963.         Data.l #PB_Shortcut_N
  964.         Data.l 10
  965.         Data.l 1020, 530, 105, 105
  966.         Data.s "N"
  967.         Data.l 1
  968.         Data.s "N"
  969.         Data.l -1, 0, 30
  970.        
  971.         ; ,
  972.         Data.l 188
  973.         Data.l 10
  974.         Data.l 1150, 530, 105, 105
  975.         Data.s ","
  976.         Data.l 2
  977.         Data.s ","
  978.         Data.l -1, 0, 30
  979.         Data.s "?"
  980.         Data.l 5, 5, 22
  981.        
  982.         ; ;
  983.         Data.l 190
  984.         Data.l 10
  985.         Data.l 1280, 530, 105, 105
  986.         Data.s ";"
  987.         Data.l 2
  988.         Data.s ";"
  989.         Data.l -1, 0, 30
  990.         Data.s ";"
  991.         Data.l 5, 5, 22
  992.        
  993.         ; :
  994.         Data.l 191
  995.         Data.l 10
  996.         Data.l 1410, 530, 105, 105
  997.         Data.s ":"
  998.         Data.l 2
  999.         Data.s ":"
  1000.         Data.l -1, 0, 30
  1001.         Data.s ":"
  1002.         Data.l 5, 5, 22
  1003.        
  1004.         ; !
  1005.         Data.l 223
  1006.         Data.l 10
  1007.         Data.l 1540, 530, 105, 105
  1008.         Data.s "!"
  1009.         Data.l 2
  1010.         Data.s "!"
  1011.         Data.l -1, 0, 30
  1012.         Data.s "!"
  1013.         Data.l 5, 5, 22
  1014.        
  1015.         ; right shift
  1016.         Data.l 16
  1017.         Data.l 10
  1018.         Data.l 1670, 530, 310, 105
  1019.         Data.s "right shift"
  1020.         Data.l 1
  1021.         Data.s "Shift"
  1022.         Data.l -1, 0, 22
  1023.        
  1024.         ;}
  1025.        
  1026.         ;{ Left Ctrl, windows, alt, space, alt gr, menu, right ctrl
  1027.        
  1028.         ; Left Ctrl
  1029.         Data.l 17
  1030.         Data.l 10
  1031.         Data.l 90, 655, 255, 105
  1032.         Data.s "Left Control"
  1033.         Data.l 1
  1034.         Data.s "Ctrl"
  1035.         Data.l -1, 0, 22
  1036.        
  1037.         ; window
  1038.         Data.l #PB_Shortcut_LeftWindows
  1039.         Data.l 10
  1040.         Data.l 370, 655, 105, 105
  1041.         Data.s "Windows"
  1042.         Data.l 1
  1043.         Data.s "windows"
  1044.         Data.l -1, 0, 16
  1045.        
  1046.         ; Alt
  1047.         Data.l 18
  1048.         Data.l 10
  1049.         Data.l 500, 655, 105, 105
  1050.         Data.s "Alt"
  1051.         Data.l 1
  1052.         Data.s "alt"
  1053.         Data.l -1, 0, 30
  1054.        
  1055.         ; Espace
  1056.         Data.l #PB_Shortcut_Space
  1057.         Data.l 10
  1058.         Data.l 630, 655, 625, 105
  1059.         Data.s "Espace"
  1060.         Data.l 1
  1061.         Data.s " "
  1062.         Data.l -1, 0, 22
  1063.        
  1064.         ; Alt gr
  1065.         Data.l 18
  1066.         Data.l 10
  1067.         Data.l 1280, 655, 105, 105
  1068.         Data.s "Alt gr"
  1069.         Data.l 1
  1070.         Data.s "alt gr"
  1071.         Data.l -1, 0, 22
  1072.        
  1073.         ; menu
  1074.         Data.l 93
  1075.         Data.l 10
  1076.         Data.l 1410, 655, 105, 105
  1077.         Data.s "menu"
  1078.         Data.l 1
  1079.         Data.s "Menu"
  1080.         Data.l -1, 0, 22
  1081.        
  1082.         ; right ctrl
  1083.         Data.l 17
  1084.         Data.l 10
  1085.         Data.l 1540, 655, 310, 105
  1086.         Data.s "right ctrl"
  1087.         Data.l 1
  1088.         Data.s "Ctrl"
  1089.         Data.l -1, 0, 22
  1090.        
  1091.         ;}
  1092.        
  1093.         ;{ Arrow Keys
  1094.        
  1095.         ; left
  1096.         Data.l #PB_Shortcut_Left
  1097.         Data.l 10
  1098.         Data.l 1900, 685, 105, 105
  1099.         Data.s "left"
  1100.         Data.l 1
  1101.         Data.s "left"
  1102.         Data.l -1, 0, 20
  1103.        
  1104.         ; down
  1105.         Data.l #PB_Shortcut_Down
  1106.         Data.l 10
  1107.         Data.l 2030, 685, 105, 105
  1108.         Data.s "down"
  1109.         Data.l 1
  1110.         Data.s "down"
  1111.         Data.l -1, 0, 20
  1112.        
  1113.         ; right
  1114.         Data.l #PB_Shortcut_Right
  1115.         Data.l 10
  1116.         Data.l 2160, 685, 105, 105
  1117.         Data.s "right"
  1118.         Data.l 1
  1119.         Data.s "right"
  1120.         Data.l -1, 0, 20
  1121.        
  1122.         ; up
  1123.         Data.l #PB_Shortcut_Up
  1124.         Data.l 10
  1125.         Data.l 2030, 560, 105, 105
  1126.         Data.s "up"
  1127.         Data.l 1
  1128.         Data.s "up"
  1129.         Data.l -1, 0, 20
  1130.        
  1131.         ;}
  1132.        
  1133.         ;{ Num Pad
  1134.        
  1135.         ; deb
  1136.         Data.l #PB_Shortcut_Home
  1137.         Data.l 10
  1138.         Data.l 2185, 55, 105, 65
  1139.         Data.s "home"
  1140.         Data.l 1
  1141.         Data.s "home"
  1142.         Data.l -1, 0, 20
  1143.        
  1144.         ; page up
  1145.         Data.l #PB_Shortcut_PageUp
  1146.         Data.l 10
  1147.         Data.l 2315, 55, 105, 65
  1148.         Data.s "Page Up"
  1149.         Data.l 1
  1150.         Data.s "Page Up"
  1151.         Data.l -1, 0, 16
  1152.        
  1153.         ; page down
  1154.         Data.l #PB_Shortcut_PageDown
  1155.         Data.l 10
  1156.         Data.l 2445, 55, 105, 65
  1157.         Data.s "Page Down"
  1158.         Data.l 1
  1159.         Data.s "Page Down"
  1160.         Data.l -1, 0, 16
  1161.        
  1162.         ; fin
  1163.         Data.l #PB_Shortcut_End
  1164.         Data.l 10
  1165.         Data.l 2575, 55, 105, 65
  1166.         Data.s "End"
  1167.         Data.l 1
  1168.         Data.s "End"
  1169.         Data.l -1, 0, 20
  1170.        
  1171.        
  1172.         ; PavNum NumLock
  1173.         Data.l #PB_Shortcut_Numlock
  1174.         Data.l 10
  1175.         Data.l 2185, 155, 105, 105
  1176.         Data.s "num lock"
  1177.         Data.l 1
  1178.         Data.s "num lk"
  1179.         Data.l -1, 0, 20
  1180.        
  1181.         ; PavNum /
  1182.         Data.l #PB_Shortcut_Divide
  1183.         Data.l 10
  1184.         Data.l 2315, 155, 105, 105
  1185.         Data.s "/"
  1186.         Data.l 1
  1187.         Data.s "/"
  1188.         Data.l -1, 0, 30
  1189.        
  1190.         ; PavNum *
  1191.         Data.l #PB_Shortcut_Multiply
  1192.         Data.l 10
  1193.         Data.l 2445, 155, 105, 105
  1194.         Data.s "*"
  1195.         Data.l 1
  1196.         Data.s "*"
  1197.         Data.l -1, 0, 30
  1198.        
  1199.         ; PavNum -
  1200.         Data.l #PB_Shortcut_Subtract
  1201.         Data.l 10
  1202.         Data.l 2575, 155, 105, 105
  1203.         Data.s "-"
  1204.         Data.l 1
  1205.         Data.s "-"
  1206.         Data.l -1, 0, 30
  1207.        
  1208.        
  1209.         ; PavNum 7
  1210.         Data.l #PB_Shortcut_Pad7
  1211.         Data.l 10
  1212.         Data.l 2185, 280, 105, 105
  1213.         Data.s "7"
  1214.         Data.l 1
  1215.         Data.s "7"
  1216.         Data.l -1, 0, 30
  1217.        
  1218.         ; PavNum 8
  1219.         Data.l #PB_Shortcut_Pad8
  1220.         Data.l 10
  1221.         Data.l 2315, 280, 105, 105
  1222.         Data.s "8"
  1223.         Data.l 1
  1224.         Data.s "8"
  1225.         Data.l -1, 0, 30
  1226.        
  1227.         ; PavNum 9
  1228.         Data.l #PB_Shortcut_Pad9
  1229.         Data.l 10
  1230.         Data.l 2445, 280, 105, 105
  1231.         Data.s "9"
  1232.         Data.l 1
  1233.         Data.s "9"
  1234.         Data.l -1, 0, 30
  1235.        
  1236.         ; PavNum +
  1237.         Data.l #PB_Shortcut_Add
  1238.         Data.l 10
  1239.         Data.l 2575, 280, 105, 230
  1240.         Data.s "+"
  1241.         Data.l 1
  1242.         Data.s "+"
  1243.         Data.l -1, 0, 30
  1244.        
  1245.        
  1246.         ; PavNum 4
  1247.         Data.l #PB_Shortcut_Pad4
  1248.         Data.l 10
  1249.         Data.l 2185, 405, 105, 105
  1250.         Data.s "4"
  1251.         Data.l 1
  1252.         Data.s "4"
  1253.         Data.l -1, 0, 30
  1254.        
  1255.         ; PavNum 5
  1256.         Data.l #PB_Shortcut_Pad5
  1257.         Data.l 10
  1258.         Data.l 2315, 405, 105, 105
  1259.         Data.s "5"
  1260.         Data.l 1
  1261.         Data.s "5"
  1262.         Data.l -1, 0, 30
  1263.        
  1264.         ; PavNum 6
  1265.         Data.l #PB_Shortcut_Pad6
  1266.         Data.l 10
  1267.         Data.l 2445, 405, 105, 105
  1268.         Data.s "6"
  1269.         Data.l 1
  1270.         Data.s "6"
  1271.         Data.l -1, 0, 30
  1272.        
  1273.        
  1274.         ; PavNum 1
  1275.         Data.l #PB_Shortcut_Pad1
  1276.         Data.l 10
  1277.         Data.l 2185, 530, 105, 105
  1278.         Data.s "1"
  1279.         Data.l 1
  1280.         Data.s "1"
  1281.         Data.l -1, 0, 30
  1282.        
  1283.         ; PavNum 2
  1284.         Data.l #PB_Shortcut_Pad2
  1285.         Data.l 10
  1286.         Data.l 2315, 530, 105, 105
  1287.         Data.s "2"
  1288.         Data.l 1
  1289.         Data.s "2"
  1290.         Data.l -1, 0, 30
  1291.        
  1292.         ; PavNum 3
  1293.         Data.l #PB_Shortcut_Pad3
  1294.         Data.l 10
  1295.         Data.l 2445, 530, 105, 105
  1296.         Data.s "3"
  1297.         Data.l 1
  1298.         Data.s "3"
  1299.         Data.l -1, 0, 30
  1300.        
  1301.         ; PavNum Return
  1302.         Data.l #PB_Shortcut_Return
  1303.         Data.l 10
  1304.         Data.l 2575, 530, 105, 230
  1305.         Data.s "right return"
  1306.         Data.l 1
  1307.         Data.s "return"
  1308.         Data.l -1, 0, 22
  1309.        
  1310.        
  1311.         ; PavNum 0
  1312.         Data.l #PB_Shortcut_Pad0
  1313.         Data.l 10
  1314.         Data.l 2315, 655, 105, 105
  1315.         Data.s "0"
  1316.         Data.l 1
  1317.         Data.s "0"
  1318.         Data.l -1, 0, 30
  1319.        
  1320.         ; PavNum .
  1321.         Data.l #PB_Shortcut_Decimal
  1322.         Data.l 10
  1323.         Data.l 2445, 655, 105, 105
  1324.         Data.s "."
  1325.         Data.l 1
  1326.         Data.s "."
  1327.         Data.l -1, 0, 30
  1328.         ;}
  1329.        
  1330.         KD_Default_keyboard_end:
  1331. EndDataSection
  1332.  
  1333. ;}
  1334.  
  1335.  
  1336. ;{ SECTION TEST
  1337.  
  1338. CompilerIf #PB_Compiler_IsMainFile
  1339.        
  1340.         ;{ fenetre de test
  1341.        
  1342.         If OpenWindow(0, 0, 0, 1100, 550, "Test Key binding display", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
  1343.                 CanvasGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), #PB_Canvas_Keyboard)
  1344.                
  1345.                 RemoveKeyboardShortcut(0, #PB_Shortcut_Tab)
  1346.                
  1347.                 SetActiveGadget(0)
  1348.         Else
  1349.                 End
  1350.         EndIf
  1351.        
  1352.         scale_factor.d = 0.4
  1353.         DefaultFont = LoadFont(#PB_Any, "Arial", 12)
  1354.        
  1355.         ;}
  1356.        
  1357.        
  1358.         *keyboard.KD_Keyboard = KD_LoadKeyboard()
  1359.        
  1360.         If StartDrawing(CanvasOutput(0))
  1361.                
  1362.                 KD_DrawKeyboard(*keyboard, scale_factor)
  1363.                
  1364.                 StopDrawing()
  1365.         EndIf  
  1366.        
  1367.         NewMap KeyDown.l()
  1368.         NewList Infos.s()
  1369.        
  1370.         Macro Addelement_Infos(txt)
  1371.                 LastElement(Infos())
  1372.                 AddElement(Infos())
  1373.                
  1374.                 Infos() = txt
  1375.                
  1376.                 If ListSize(Infos()) > 10
  1377.                         FirstElement(Infos())
  1378.                         DeleteElement(Infos())
  1379.                 EndIf
  1380.         EndMacro
  1381.        
  1382.        
  1383.         ;{ boucle principale
  1384.        
  1385.         Repeat 
  1386.                 event = WaitWindowEvent()
  1387.                
  1388.                 ;{ event
  1389.                
  1390.                 If event = #PB_Event_Gadget
  1391.                         Select EventGadget()
  1392.                                 Case 0
  1393.                                         Select EventType()
  1394.                                                 Case #PB_EventType_KeyDown
  1395.                                                         key.l = GetGadgetAttribute(0, #PB_Canvas_Key)
  1396.                                                        
  1397.                                                                 MAJ = #True
  1398.                                                         Addelement_Infos("Down : " + Str(key))
  1399.                                                        
  1400.                                                         If FindMapElement(KeyDown(), Str(key)) = 0
  1401.                                                                 KeyDown(Str(key)) = key
  1402.                                                                
  1403.                                                         EndIf
  1404.                                                        
  1405.                                                        
  1406.                                                 Case #PB_EventType_KeyUp
  1407.                                                         key.l = GetGadgetAttribute(0, #PB_Canvas_Key)
  1408.                                                        
  1409.                                                                 MAJ = #True
  1410.                                                         Addelement_Infos("Up : " + Str(key))
  1411.                                                        
  1412.                                                         If FindMapElement(KeyDown(), Str(key))
  1413.                                                                 DeleteMapElement(KeyDown());, Str(key))
  1414.                                                                
  1415.                                                         EndIf
  1416.                                                        
  1417.                                                 Case #PB_EventType_MouseWheel
  1418.                                                           scale_factor = scale_factor + 0.1 * GetGadgetAttribute(0, #PB_Canvas_WheelDelta)
  1419.                                                          
  1420.                                                           If scale_factor < 0.1 : scale_factor = 0.1 : EndIf                                                     
  1421.                                                           If scale_factor > 1.5 : scale_factor = 1.5 : EndIf                                                     
  1422.                                                          
  1423.                                                           MAJ = #True
  1424.                                                          
  1425.                                         EndSelect
  1426.                                        
  1427.                                        
  1428.                         EndSelect
  1429.                 EndIf
  1430.                 ;}
  1431.                
  1432.                 ;{ maj dessin
  1433.                
  1434.                 If MAJ
  1435.                         MAJ = #False
  1436.                        
  1437.                         If StartDrawing(CanvasOutput(0))
  1438.                                 Box(0, 0, GadgetWidth(0), GadgetHeight(0), #White)
  1439.                                
  1440.                                 KD_DrawSelectedKeyboard(*keyboard, scale_factor, KeyDown())
  1441.                                
  1442.                                 DrawingMode(#PB_2DDrawing_Transparent)
  1443.                                 DrawingFont(FontID(DefaultFont))
  1444.                                 ForEach Infos()
  1445.                                         DrawText(30, 330 + ListIndex(Infos()) * 20, Infos(), 0)
  1446.                                 Next
  1447.                                
  1448.                                 StopDrawing()
  1449.                         EndIf
  1450.                 EndIf
  1451.                
  1452.                 ;}
  1453.                
  1454.         Until event = #PB_Event_CloseWindow
  1455.        
  1456.         ;}
  1457.        
  1458.         End
  1459.        
  1460. CompilerEndIf
  1461.  
  1462. ;}
  1463.  
  1464. ; IDE Options = PureBasic 5.21 LTS (Windows - x86)
  1465. ; CursorPosition = 1
  1466. ; FirstLine = 1
  1467. ; Folding = fLgAs9
  1468. ; EnableThread
  1469. ; EnableXP
  1470. ; CompileSourceDirectory
  1471. ; EnableCompileCount = 60
  1472. ; EnableBuildCount = 0
  1473. ; EnableExeConstant

No comments on this source code.