home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / hc / x_tools1.sit / X-Tools1.1 / card_11894.txt < prev    next >
Text File  |  1988-01-27  |  6KB  |  131 lines

  1. -- card: 11894 from stack: in.1
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 3468
  5. -- name: 
  6.  
  7.  
  8. -- part contents for background part 2
  9. ----- text -----
  10. PostEvent
  11.  
  12. -- part contents for background part 8
  13. ----- text -----
  14. Dewi Williams
  15.  
  16. -- part contents for background part 9
  17. ----- text -----
  18. XCMD
  19.  
  20. -- part contents for background part 4
  21. ----- text -----
  22. PostEvent <modifier>,<virtual keyCode> - Tempo
  23. PostEvent <sequence name> - Quickeys
  24.  
  25.  
  26. -- part contents for background part 1
  27. ----- text -----
  28.  
  29. This stack explains how to glue together Hypercard with the Tempo macro utility or the QuicKeys keyboard enhancer, using a XCMD resource called PostEvent. You'll need Tempo version 1.2 or QuicKeys 1.0, and System 4.1 or later. 
  30.  
  31. Invoking QuicKeys sequences or Tempo macros from within Hypercard can be quite useful. You can do the following:
  32.    ΓÇó  Fill in any cracks in the HyperTalk programming language.
  33.    ΓÇó  HyperTalk won't let you issue click commands for dialog boxes (e.g. the
  34.        printing ones). 
  35.    ΓÇó  HyperTalk won't let you invoke desk accessory menu items via doMenu.
  36.    ΓÇó┬áIf you have a "minifinder" card in your Home stack, you can launch
  37.        applications under the control of a sequence or macro. 
  38.  
  39. HYPERCARD & TEMPO:
  40. ---------------------
  41. The PostEvent command allows a script to post a keydown event with arbitrary modifiers (Option, Command, Shift, Caps Lock or any combination of these). If there is a Tempo macro corresponding to this key combination, then it should run.
  42.  
  43. PostEvent is called like this for Tempo:
  44.  
  45.                           PostEvent modifier,virtual keyCode
  46.  
  47. For instance, the following call posts an option-w:  
  48.  
  49.                           PostEvent "O",13 
  50.  
  51. (where the first argument is an upper-case "Oh", not a zero).
  52. A ΓÇ£virtual keyCodeΓÇ¥┬áis a keyboard-independent method of identifying a keystroke.
  53.  
  54. HYPERCARD & QUICKEYS:
  55. ------------------------
  56. This isn't as ugly as the Tempo interface. You can specify the name of the QuicKeys sequence or click that you want to run as a single parameter:
  57.  
  58.                            PostEvent "Reformat"
  59.  
  60. will run a click or sequence that you had previously given that name. PostEvent will accept the first match that it can find, checking the Hypercard-specific keys first, and then the Universal ones. If it can't find a match, it will beep once.
  61.  
  62. The Tempo interface will also work with QuicKeys. You might want to do this to issue a command key to a desk accessory, for instance. For QuicKeys only, a control key modifier can be specified in the first argument ΓÇô┬áuse a lower case "c".
  63.  
  64. TEMPO & QUICKEYS:
  65. -------------------
  66. QuicKeys and Tempo seem to coexist, though I haven't pushed my luck. The PostEvent command needs to know which one you're using, and uses the following rules:
  67.  
  68. 1. If you call PostEvent with only one argument, then it's a QuicKeys sequence or 
  69.     click name.
  70.  
  71. 2. If you call with 2 arguments, PostEvent checks for a Hypercard global variable   
  72.     called "Macro". If this global contains the string "Tempo", then Tempo's used. If       
  73.     the global doesn't exist, or holds some other name, then QuicKeys is used.
  74.  
  75.     Putting the following handler in the card script should be sufficient:
  76.  
  77.              on openCard
  78.                   global Macro
  79.                   put "QuicKeys" into Macro
  80.              end openCard
  81.  
  82. RUNNING A CONTROLLED APPLICATION:
  83. ------------------------------------
  84. PostEvent doesn't immediately invoke a sequence or macro. Instead, it posts a "key down" event for later consumption by Hypercard. So a HyperTalk fragment like the following won't work:
  85.  
  86.                         PostEvent "InitRulers"
  87.                         open "MacWrite"
  88.  
  89. because nobody will see the event. The trick is to have the sequence or macro already running when you issue the open command. I use the following trick:
  90.  
  91. Create an invisible button called "Macro". Every sequence starts by clicking on its location. It has the open command in its mouseUp handler (if necessary the application name can be saved in a global variable). Then the following fragment can be used:
  92.  
  93.                        set the hilite of button "Macro" to true -- show it
  94.                        PostEvent "InitRulers"
  95.  
  96. and the sequence will take over. In QuicKeys, the sequence and its components will have to be Universal, not program-specific.
  97.  
  98. MODIFIER VALUES:
  99. -----------------
  100.     ΓÇó┬áCommand:    C
  101.     ΓÇó┬áShift:           S
  102.     ΓÇó  Caps Lock:    L
  103.     ΓÇó┬áOption:         O
  104.  
  105. Concatenate the modifiers to get the required combination. For instance, "SO" is Shift-Option. One note of caution:  Command-Option combinations are tricky to test  under HyperCard because these two keys are used as a ΓÇ£reveal buttonsΓÇ¥ function. Try it and see!
  106.  
  107. VIRTUAL KEYCODES:
  108. -------------------
  109. 0 1 2 3 4 5 6 7 8 9   10   11 12 13 14 15 16 17 18  19  20
  110. A S D F H G Z X C V   res    B   Q   W   E   R   Y   T  1!  2@  3#
  111.  
  112. 21  22  23  24  25  26  27  28  29  30  31  32  33  34  35    36     37 38  39  40  41
  113. 4$  6^  5%  =+  9(  7&  -_  8*  0)  ]}    O    U    [{    I     P  Return   L    J   '"    K   ;:
  114.  
  115. 42  43  44  45  46  47  48   49   50    51        52       53      54   55      56     57  
  116.  \|  ,<   /?   N   M   .>   Tab Space `~  BackSp  Enter  Escape  res  Cmd  Shift  CapsLk
  117.  
  118.   58          59         60       61    62     63      64    65  66      67   68        69       70
  119. Option  Control   RShift  ROpt  RCntrl  res  unused  .   rt arr  *   unused    +      lt arr +    
  120.  
  121.   71       72        73         74      75   76       77      78      79        80      81  82  83
  122. Clear  dn arr   unused   unused   /   Enter  up arr/   -   unused   unused   =     0     1
  123.  
  124. 84 85 86 87 88 89   90    91 92   93       94       95     96 97  98 99 100 101 102  103
  125.  2   3   4   5   6   7 unused  8   9 unused unused unused  F5  F6  F7  F3  F8  F9 unused F11
  126.  
  127. 104      105    106   107    108    109    110   111     112   113  114   115     116
  128. unused  F13  unused  F14  unused  F10  unused  F12  unused  F15  Help  Home Page Up 
  129.  
  130. 117     118  119   120   121    122     123      124     125      126     127
  131. Delete   F4    End    F2   PageDn  F1   left arr  rt arr  dn arr   up arr  Reset