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

  1. -- card: 3735 from stack: in.1
  2. -- bmap block id: 13302
  3. -- flags: 0000
  4. -- background id: 3468
  5. -- name: 
  6.  
  7.  
  8. -- part 1 (button)
  9. -- low flags: 00
  10. -- high flags: A004
  11. -- rect: left=9 top=106 right=125 bottom=70
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 1
  15. -- font id: 0
  16. -- text size: 12
  17. -- style flags: 0
  18. -- line height: 16
  19. -- part name: Example
  20. ----- HyperTalk script -----
  21. on mousedown
  22.   put the mouseloc into myPlace
  23.   put item 1 of myPlace - 20 into horiz
  24.   put item 2 of myPlace - 10 into vert
  25.   get PopUpMenu("For;a;disk;catalog;of;BMUG's;stack;library;"& "Send;$3;To;BMUG;1442A;Walnut;#62;Berkeley;CA;94709", 5, vert, horiz)
  26.   put "You chose item" && it
  27. end mousedown
  28.  
  29.  
  30.  
  31. -- part contents for background part 1
  32. ----- text -----
  33. PopUpMenu( MenuItems, CheckedItem, Top, Left );
  34.  
  35. XFCN returns a number associated with item number chosen.
  36.  
  37. Menuitems - string of items which correspond to a line item in the menu.
  38. CheckedItem - displays a check next to item referenced by the items's line #.
  39. Top, Left - coordinates of menu placement
  40. ------------------
  41. example:
  42.  
  43.  on mousedown
  44.    put the mouseloc into myPlace
  45.    put item 1 of myPlace - 20 into horiz
  46.    put item 2 of myPlace - 10 into vert
  47.    get PopUpMenu("For;a;disk;catalog;of;BMUG's;stack;library;"&┬¼
  48.    "Send;$3;To;BMUG;1442A;Walnut;#62;Berkeley;CA;94709", 5, vert, horiz)
  49.    put "You chose item" && it
  50.  end mousedown
  51. -------------------
  52.  
  53. CODE:
  54.  To compile and link using Macintosh Programmer's Workshop 2.0 execute
  55.  the following:
  56.  
  57. pascal -w PopUp.p
  58. link -o HyperCommands -rt XFCN=0 -sn Main=PopUpMenu PopUp.p.o
  59.  
  60.  I wish to thank Dewi Williams and Larry Rosenstein for thier initial
  61.  information and example.
  62.  
  63.  Andrew Gilmartin
  64.  Brown University
  65. }
  66.  
  67. UNIT PopUpUnit;
  68.  
  69. INTERFACE
  70.  
  71. USES MemTypes, QuickDraw, OSIntf, ToolIntf, HyperXCmd;
  72.  
  73. PROCEDURE EntryPoint(paramPtr: XCmdPtr);
  74.  
  75. IMPLEMENTATION
  76.  
  77. PROCEDURE PopUpMenu(paramPtr: XCmdPtr);
  78. FORWARD;
  79.  
  80. PROCEDURE EntryPoint(paramPtr: XCmdPtr);
  81.  
  82. BEGIN
  83. PopUpMenu(paramPtr)
  84. END { entrypoint } ;
  85.  
  86. PROCEDURE PopUpMenu;
  87.  
  88. CONST
  89. MenuID = 128;
  90.  
  91. VAR
  92. Menu: MenuHandle;
  93. MenuItems: Str255;
  94. CheckedItem, SelectedItem, Top, Left: LongInt;
  95.  
  96. {$I XCmdGlue.inc}
  97.  
  98. PROCEDURE ParamToMenuItems(Param: Handle;
  99.  VAR MenuItems: Str255);
  100.  
  101. VAR
  102. Index: integer;
  103.  
  104. BEGIN
  105.  
  106. ZeroToPas(Param^, MenuItems);
  107.  
  108. FOR Index := 1 TO length(MenuItems) DO
  109. IF MenuItems[Index] = ',' THEN
  110. MenuItems[Index] := ';';
  111.  
  112. END { ParamToMenuItems } ;
  113.  
  114. FUNCTION ParamToNum(Param: Handle): LongInt;
  115.  
  116. VAR
  117. Str: Str255;
  118.  
  119. BEGIN
  120. ZeroToPas(Param^, Str);
  121. ParamToNum := StrToNum(Str);
  122. END { ParamToNum } ;
  123.  
  124. FUNCTION NumToParam(Num: LongInt): Handle;
  125.  
  126. VAR
  127. Str: Str31;
  128.  
  129. BEGIN
  130. Str := NumToStr(Num);
  131. NumToParam := PasToZero(Str)
  132. END { NumToParam } ;
  133.  
  134. BEGIN
  135.  
  136. WITH paramPtr^ DO
  137. BEGIN
  138.  
  139. { Create the PopUp menu }
  140. ParamToMenuItems(Params[1], MenuItems);
  141. CheckedItem := ParamToNum(Params[2]);
  142. Menu := NewMenu(MenuID, '');
  143. AppendMenu(Menu, MenuItems);
  144. CheckItem(Menu, CheckedItem, true);
  145. InsertMenu(Menu, - 1);
  146.  
  147. { Get Menu Position }
  148. Top := ParamToNum(Params[3]);
  149. Left := ParamToNum(Params[4]);
  150.  
  151. { Get Menu Selection }
  152. SelectedItem := PopUpMenuSelect(Menu, Top, Left, CheckedItem);
  153.  
  154. { Tidy up }
  155. DeleteMenu(MenuID);
  156. DisposeMenu(Menu);
  157.  
  158. { Return the selection }
  159. returnValue := NumToParam(LoWord(SelectedItem))
  160.  
  161. END
  162.  
  163. END { PopUpMenu } ;
  164.  
  165. END. { PopUp Unit }
  166.  
  167.  
  168. -- part contents for background part 2
  169. ----- text -----
  170. PopUpMenu
  171.  
  172. -- part contents for background part 4
  173. ----- text -----
  174.  
  175. PopUpMenu(<MenuItems>, <CheckedItem>, <Top>, <Left>)
  176.  
  177.  
  178.  
  179. -- part contents for background part 9
  180. ----- text -----
  181. XFCN
  182.  
  183. -- part contents for background part 8
  184. ----- text -----
  185. Andrew Gilmartin