gtmenu.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. Program GadtoolsMenu;
  2. {* gadtoolsmenu.p
  3. ** Example showing the basic usage of the menu system with a window.
  4. ** Menu layout is done with GadTools, as is recommended for applications.
  5. **
  6. *}
  7. {
  8. Changed to use TAGS and pas2c.
  9. 1 Nov 1998.
  10. Updated for systemvartags.
  11. 28 Nov 2002.
  12. [email protected]
  13. }
  14. uses Exec, Intuition, Utility, GadTools;
  15. const
  16. mynewmenu : array[0..15] of tNewMenu = (
  17. (nm_Type: NM_TITLE; nm_Label:'Project'; nm_CommKey: NIL; nm_Flags:0;
  18. nm_MutualExclude:0; nm_UserData:NIL),
  19. (nm_Type: NM_ITEM; nm_Label:'Open...'; nm_CommKey:'O'; nm_Flags:0;
  20. nm_MutualExclude:0; nm_UserData:NIL),
  21. (nm_Type: NM_ITEM; nm_Label:'Save'; nm_CommKey:'S'; nm_Flags:0;
  22. nm_MutualExclude:0; nm_UserData:NIL),
  23. (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
  24. nm_MutualExclude:0; nm_UserData:NIL),
  25. (nm_Type: NM_ITEM; nm_Label:'Print'; nm_CommKey: NIL; nm_Flags:0;
  26. nm_MutualExclude:0; nm_UserData:NIL),
  27. (nm_Type: NM_SUB; nm_Label:'Draft'; nm_CommKey: NIL; nm_Flags:0;
  28. nm_MutualExclude:0; nm_UserData:NIL),
  29. (nm_Type: NM_SUB; nm_Label:'NLQ'; nm_CommKey: NIL; nm_Flags:0;
  30. nm_MutualExclude:0; nm_UserData:NIL),
  31. (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
  32. nm_MutualExclude:0; nm_UserData:NIL),
  33. (nm_Type: NM_ITEM; nm_Label:'Quit...'; nm_CommKey:'Q'; nm_Flags:0;
  34. nm_MutualExclude:0; nm_UserData:NIL),
  35. (nm_Type: NM_TITLE; nm_Label:'Edit'; nm_CommKey: NIL; nm_Flags:0;
  36. nm_MutualExclude:0; nm_UserData:NIL),
  37. (nm_Type: NM_ITEM; nm_Label:'Cut'; nm_CommKey:'X'; nm_Flags:0;
  38. nm_MutualExclude:0; nm_UserData:NIL),
  39. (nm_Type: NM_ITEM; nm_Label:'Copy'; nm_CommKey:'C'; nm_Flags:0;
  40. nm_MutualExclude:0; nm_UserData:NIL),
  41. (nm_Type: NM_ITEM; nm_Label:'Paste'; nm_CommKey:'V'; nm_Flags:0;
  42. nm_MutualExclude:0; nm_UserData:NIL),
  43. (nm_Type: NM_ITEM; nm_Label:nil; nm_CommKey: NIL; nm_Flags:0;
  44. nm_MutualExclude:0; nm_UserData:NIL),
  45. (nm_Type: NM_ITEM; nm_Label:'Undo'; nm_CommKey:'Z'; nm_Flags:0;
  46. nm_MutualExclude:0; nm_UserData:NIL),
  47. (nm_Type: NM_END; nm_Label:NIL; nm_CommKey:NIL; nm_Flags:0;
  48. nm_MutualExclude:0; nm_UserData:NIL));
  49. var
  50. win : pWindow;
  51. myVisualInfo : Pointer;
  52. menuStrip : pMenu;
  53. msg : pMessage;
  54. done : boolean;
  55. Procedure Die;
  56. begin
  57. if assigned(MenuStrip) then begin
  58. ClearMenuStrip(win);
  59. FreeMenus(MenuStrip);
  60. end;
  61. if assigned(myVisualInfo) then FreeVisualInfo(myVisualInfo);
  62. if assigned(win) then CloseWindow(win);
  63. Halt(0);
  64. end;
  65. {*
  66. ** Watch the menus and wait for the user to select the close gadget
  67. ** or quit from the menus.
  68. *}
  69. PROCEDURE ProcessIDCMP;
  70. VAR
  71. IMessage : tIntuiMessage;
  72. IPtr : pIntuiMessage;
  73. Procedure ProcessMenu;
  74. var
  75. MenuNumber : Word;
  76. ItemNumber : Word;
  77. SubItemNumber : Word;
  78. begin
  79. if IMessage.Code = MENUNULL then
  80. Exit;
  81. MenuNumber := MenuNum(IMessage.Code);
  82. ItemNumber := ItemNum(IMessage.Code);
  83. SubItemNumber := SubNum(IMessage.Code);
  84. if (MenuNumber = 0) and (ItemNumber = 5) then done := true;
  85. end;
  86. begin
  87. IPtr := pIntuiMessage(Msg);
  88. IMessage := IPtr^;
  89. ReplyMsg(Msg);
  90. case IMessage.IClass of
  91. IDCMP_MENUPICK : ProcessMenu;
  92. IDCMP_CLOSEWINDOW : done := True;
  93. end;
  94. end;
  95. {*
  96. ** Open all of the required libraries and set-up the menus.
  97. *}
  98. begin
  99. win := OpenWindowTags(NIL, [
  100. WA_Width, 400,
  101. WA_Activate, ltrue,
  102. WA_Height, 100,
  103. WA_CloseGadget, ltrue,
  104. WA_Title, AsTag('Menu Test Window'),
  105. WA_IDCMP, IDCMP_CLOSEWINDOW or IDCMP_MENUPICK,
  106. TAG_END]);
  107. if win = nil then die;
  108. myVisualInfo := GetVisualInfoA(win^.WScreen,nil);
  109. if myVisualInfo = nil then die;
  110. {
  111. make the barlabels
  112. }
  113. mynewmenu[3].nm_Label := PChar(NM_BARLABEL);
  114. mynewmenu[7].nm_Label := PChar(NM_BARLABEL);
  115. mynewmenu[13].nm_Label := PChar(NM_BARLABEL);
  116. if pExecBase(_ExecBase)^.LibNode.Lib_Version >= 39 then begin
  117. MenuStrip := CreateMenus(@mynewmenu, [
  118. GTMN_FrontPen, 1,
  119. TAG_END]);
  120. end else MenuStrip := CreateMenusA(@mynewmenu,NIL);
  121. if menuStrip = nil then die;
  122. if not LayoutMenusA(menuStrip, myVisualInfo,nil) then die;
  123. if not SetMenuStrip(win,menuStrip) then die;
  124. repeat
  125. Msg := WaitPort(win^.UserPort);
  126. Msg := GetMsg(win^.UserPort);
  127. ProcessIDCMP;
  128. until done;
  129. die;
  130. end.