home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / VWCIS / VWPOPUP.PAS < prev    next >
Pascal/Delphi Source File  |  1993-10-28  |  3KB  |  110 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Vision Workshop for Turbo Vision                }
  5. {       Demo program                                    }
  6. {                                                       }
  7. {       o  Shows how to use a popup menu stored in a    }
  8. {          resource file - see                          }
  9. {          TPopupEditWindow.HandleEvent                 }
  10. {       o  Shows how to use a menu bar stored in a      }
  11. {          resource file - see TVWPopupApp.InitMenuBar  }
  12. {                                                       }
  13. {       Copyright (c) 1992, 93 by FE                    }
  14. {                                                       }
  15. {*******************************************************}
  16.  
  17. PROGRAM VWPopup;
  18.  
  19. USES Objects, App, Memory, Drivers, Views, Menus, Dialogs, Editors;
  20.  
  21. CONST
  22.   cmOpenEditor = 100;
  23.  
  24. VAR
  25.   RezFile: TResourceFile;
  26.  
  27. TYPE
  28.   TVWPopupApp = object(TApplication)
  29.     CONSTRUCTOR Init;
  30.     PROCEDURE HandleEvent(VAR Event: TEvent); VIRTUAL;
  31.     PROCEDURE InitMenuBar; VIRTUAL;
  32.   END;
  33.  
  34.   PPopupEditWindow = ^TPopupEditWindow;
  35.   TPopupEditWindow = OBJECT(TEditWindow)
  36.     PROCEDURE HandleEvent(VAR Event: TEvent); VIRTUAL;
  37.   END;
  38.  
  39. { Open a local popup menu at the mouse position when the right mouse button
  40.   has been pressed }
  41. PROCEDURE TPopupEditWindow.HandleEvent(VAR Event: TEvent);
  42. VAR
  43.   Popup: PMenuPopup;
  44. BEGIN
  45.   IF (Event.What = evMouseDown) AND (Event.Buttons = mbRightButton) THEN BEGIN
  46.     { load popup menu from resource }
  47.     Popup := PMenuPopup(RezFile.Get('Popup'));
  48.     { adjust popup menu }
  49.     Popup^.MoveTo(Event.Where.X, Event.Where.Y);
  50.     { insert local menu }
  51.     DeskTop^.Insert(Popup);
  52.     { activate it }
  53.     Message(Popup, evCommand, cmMenu, NIL);
  54.     Dispose(Popup, Done);
  55.     ClearEvent(Event);
  56.   END;
  57.   INHERITED HandleEvent(Event);
  58. END;
  59.  
  60. CONSTRUCTOR TVWPopupApp.Init;
  61. BEGIN
  62.   MaxHeapSize := 8192;
  63.   EditorDialog := StdEditorDialog;
  64.   INHERITED Init;
  65. END;
  66.  
  67. PROCEDURE TVWPopupApp.HandleEvent(VAR Event: TEvent);
  68. VAR
  69.   R: TRect;
  70.   D: PDialog;
  71. BEGIN
  72.   INHERITED HandleEvent(Event);
  73.   IF (Event.What = evCommand) AND (Event.Command = cmOpenEditor) THEN BEGIN
  74.     DeskTop^.GetExtent(R);
  75.     Application^.InsertWindow(New(PPopupEditWindow,
  76.       Init(R, '', wnNoNumber)));
  77.   END;
  78. END;
  79.  
  80. PROCEDURE TVWPopupApp.InitMenuBar;
  81. BEGIN
  82.   MenuBar := PMenuBar(RezFile.Get('MainMenu'));
  83.     { load menu bar from resource file }
  84.   IF MenuBar = NIL THEN
  85.     Halt;
  86. END;
  87.  
  88. VAR
  89.   VWPopupApp: TVWPopupApp;
  90.  
  91. BEGIN
  92.   { register all views needed by this application }
  93.   RegisterMenus;
  94.   RegisterViews;
  95.   RegisterObjects;
  96.  
  97.   { open the resource file appended to .EXE file - $40 in the open mode
  98.     is required when the resource has been appended to the .EXE file
  99.     in protected mode since RTM keeps the .EXE file open after loading }
  100.  
  101.   { RezFile.Init(New(PDosStream, Init(ParamStr(0), stOpenRead OR $40))); }
  102.  
  103.   { open the resource file stored in a separate file}
  104.   RezFile.Init(New(PDosStream, Init('VWPOPUP.REZ', stOpenRead)));
  105.  
  106.   VWPopupApp.Init;
  107.   VWPopupApp.Run;
  108.   VWPopupApp.Done;
  109.   RezFile.Done;
  110. END.