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

  1. -- card: 2302 from stack: in.1
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 3468
  5. -- name: newmenu
  6. ----- HyperTalk script -----
  7. on openCard
  8.   global menu1, menu2
  9.   hide message
  10.   put NewMenu("Beep","Once","Twice","(-","Boing/9") into menu1
  11.   put NewMenu("Visual","Effect 1","(Effect 2") into menu2
  12. end openCard
  13.  
  14. on closeCard
  15.   global menu1, menu2
  16.   put DeleteMenu(menu1) into menu1
  17.   put DeleteMenu(menu2) into menu2
  18. end closeCard
  19.  
  20. on idle
  21.   global menu1, menu2, lastTick
  22.   if (the ticks-lastTick)>120 then
  23.     put the ticks into lastTick
  24.     ShowMenu menu1
  25.     ShowMenu menu2
  26.   end if
  27.   pass idle
  28. end idle
  29.  
  30. on doMenu which
  31.   global menu1, menu2
  32.   if which is "Once" then
  33.     beep 1
  34.     CheckMenu menu1,1,true
  35.   else if which is "Twice" then
  36.     beep 1
  37.     wait 4
  38.     beep 1
  39.     CheckMenu menu1,2,true
  40.   else if which is "Boing" then
  41.     flash 3
  42.     play "Boing"
  43.     CheckMenu menu1,4,true
  44.   else if which is "Effect 1" then
  45.     push card
  46.     visual effect dissolve to black
  47.     EnableMenu menu2,1,false
  48.     EnableMenu menu2,2,true
  49.     pop card
  50.   else if which is "Effect 2" then
  51.     push card
  52.     visual effect dissolve to white
  53.     pop card
  54.     EnableMenu menu2,1,true
  55.     EnableMenu menu2,2,false
  56.   else
  57.     pass doMenu
  58.   end if
  59. end doMenu
  60.  
  61.  
  62.  
  63. -- part contents for background part 1
  64. ----- text -----
  65. NewMenu is an XFCN (external function) that allows you to add your own menus to a HyperCard stack.  You may have up to eight menus with up to 15 items per menu.  
  66.  
  67. The number the NewMenu function returns is a reference number to the menu you just installed.  You MUST have this number to delete or make changes to the menu later on!  
  68.  
  69. When you change userLevels, or select paint tools, or do anything to cause HyperCard to change the menu bar--your new menu will be erased from the menu bar.  It is NOT gone from memory, just from the menu bar.  To have it replaced automatically do the "on idle" routine shown below.  This will make sure your menu is showing whenever you are in browse mode (on idle is not called when you're in button, field, or paint tools mode).
  70.  
  71. Add an item like "(-" to insert a divider line between menu options.  You may also end items with a slash letter (as is "An item/I") to add command keys.
  72.  
  73. All this would generally be done in a stack's script as follows:
  74.  
  75. on openCard  --  display new menus
  76.   global menu1, menu2  --  keep the "handles" to the menus in these globals
  77.   put NewMenu("Beep","Once","Twice","(-","Boing/9") into menu1
  78.   if menu1 is 0 then answer("Unable to make menu 'BEEP'") with "Drat"
  79.   put NewMenu("Visual","Effect 1") into menu2
  80.   if menu2 is 0 then answer("Unable to make menu 'Visual'") with "Drat"
  81. end openCard
  82.  
  83. on closeCard  --  delete the menus we've created using the globals saved in openStack
  84.   global menu1, menu2
  85.   put DeleteMenu(menu1) into menu1  --  clearing global for safety
  86.   put DeleteMenu(menu2) into menu2
  87. end closeCard
  88.  
  89. on idle  --  call ShowMenu every so often just in case our menus vanished
  90.   global menu1, menu2, lastTick
  91.   if (the ticks-lastTick)>120 then  --  gives better performance than on every iteration
  92.     put the ticks into lastTick
  93.     ShowMenu(menu1)
  94.     ShowMenu(menu2)
  95.   end if
  96.   pass idle
  97. end idle
  98.  
  99. on doMenu which  --  get our menu items from doMenu before HyperCard does...
  100.   global menu1, menu2  -- for CheckMenu and EnableMenu below
  101.   if which is "Once" then
  102.     beep 1
  103.     get CheckMenu(menu1,1,true)
  104.   else if which is "Twice" then
  105.     beep 1
  106.     wait 4
  107.     beep 1
  108.     get CheckMenu(menu1,2,true)
  109.   else if which is "Boing" then
  110.     play "Boing"
  111.     get CheckMenu(menu1,4,true)
  112.   else if which is "Effect 1" then
  113.     push card
  114.     visual effect dissolve to black
  115.     pop card
  116.     get EnableMenu(menu2,1,false)
  117.     else pass doMenu  --  Remember to pass on menu commands you don't trap!
  118. end doMenu
  119.  
  120.  
  121. Notice that if you want the menu to appear for all cards in the stack, you would place the NewMenu function in the stack's script and install it "on openStack" and remove it "on closeStack".  If you wanted a menu to appear only for a certain background, the commands would be in that background's script and done "on openBackground" and "on closeBackground".  And the commands to make a menu to appear only on a certain card would be done in that card's script "on openCard"/"on closeCard".
  122.  
  123.  
  124.  
  125. -- part contents for background part 2
  126. ----- text -----
  127. NewMenu
  128.  
  129. -- part contents for background part 4
  130. ----- text -----
  131. NewMenu(<Title>,<Item 1>,<Item 2>,...,<Item n>)
  132.  
  133. *Menus for HyperCardΓäó
  134.  
  135. -- part contents for background part 9
  136. ----- text -----
  137. XFCN
  138.  
  139. -- part contents for background part 8
  140. ----- text -----
  141. Michael Long - Nine to Five Software Company