home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Pascal / TP.7_1 / TP / EXAMPLES / DOCDEMOS / TUTOR08B.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-10-05  |  6.0 KB  |  261 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor08b;
  9.  
  10. uses Memory, TutConst, Drivers, Objects, Views, Menus, App, Dialogs,
  11.   Editors, StdDlg;
  12.  
  13. type
  14.   POrderWindow = ^TOrderWindow;
  15.   TOrderWindow = object(TDialog)
  16.     constructor Init;
  17.     procedure HandleEvent(var Event: TEvent); virtual;
  18.   end;
  19.  
  20.   TTutorApp = object(TApplication)
  21.     ClipboardWindow: PEditWindow;
  22.     OrderWindow: POrderWindow;
  23.     constructor Init;
  24.     destructor Done; virtual;
  25.     procedure DoAboutBox;
  26.     procedure HandleEvent(var Event: TEvent); virtual;
  27.     procedure InitMenuBar; virtual;
  28.     procedure InitStatusLine; virtual;
  29.     procedure LoadDesktop;
  30.     procedure NewWindow;
  31.     procedure OpenOrderWindow;
  32.     procedure OpenWindow;
  33.     procedure SaveDesktop;
  34.   end;
  35.  
  36. var
  37.   ResFile: TResourceFile;
  38.  
  39. procedure TutorStreamError(var S: TStream); far;
  40. var
  41.   ErrorMessage: String;
  42. begin
  43.   case S.Status of
  44.     stError: ErrorMessage := 'Stream access error';
  45.     stInitError: ErrorMessage := 'Cannot initialize stream';
  46.     stReadError: ErrorMessage := 'Read beyond end of stream';
  47.     stWriteError: ErrorMessage := 'Cannot expand stream';
  48.     stGetError: ErrorMessage := 'Unregistered type read from stream';
  49.     stPutError: ErrorMessage := 'Unregistered type written to stream';
  50.     end;
  51.   DoneVideo;
  52.   PrintStr('Error: ' + ErrorMessage);
  53.   Halt(S.Status);
  54. end;
  55.  
  56. constructor TOrderWindow.Init;
  57. var
  58.   R: TRect;
  59. begin
  60.   R.Assign(0, 0, 60, 17);
  61.   inherited Init(R, 'Orders');
  62.   Options := Options or ofCentered;
  63.   HelpCtx := $F000;
  64. end;
  65.  
  66. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  67. begin
  68.   inherited HandleEvent(Event);
  69.   if (Event.What = evBroadcast) and
  70.     (Event.Command = cmFindOrderWindow) then
  71.     ClearEvent(Event);
  72. end;
  73.  
  74. constructor TTutorApp.Init;
  75. var
  76.   R: TRect;
  77. begin
  78.   MaxHeapSize := 8192;
  79.   EditorDialog := StdEditorDialog;
  80.   StreamError := @TutorStreamError;
  81.   RegisterMenus;
  82.   RegisterObjects;
  83.   RegisterViews;
  84.   RegisterApp;
  85.   RegisterEditors;
  86.   RegisterDialogs;
  87.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  88.   inherited Init;
  89.   DisableCommands([cmStockWin, cmSupplierWin]);
  90.   Desktop^.GetExtent(R);
  91.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  92.   if ValidView(ClipboardWindow) <> nil then
  93.   begin
  94.     ClipboardWindow^.Hide;
  95.     InsertWindow(ClipboardWindow);
  96.     Clipboard := ClipboardWindow^.Editor;
  97.     Clipboard^.CanUndo := False;
  98.   end;
  99. end;
  100.  
  101. destructor TTutorApp.Done;
  102. begin
  103.   ResFile.Done;
  104.   inherited Done;
  105. end;
  106.  
  107. procedure TTutorApp.DoAboutBox;
  108. begin
  109.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  110. end;
  111.  
  112. procedure TTutorApp.HandleEvent(var Event: TEvent);
  113. var
  114.   R: TRect;
  115. begin
  116.   inherited HandleEvent(Event);
  117.   if Event.What = evCommand then
  118.   begin
  119.     case Event.Command of
  120.       cmOrderWin:
  121.         begin
  122.           OpenOrderWindow;
  123.           ClearEvent(Event);
  124.         end;
  125.       cmOptionsLoad:
  126.         begin
  127.           LoadDesktop;
  128.           ClearEvent(Event);
  129.         end;
  130.       cmOptionsSave:
  131.         begin
  132.           SaveDesktop;
  133.           ClearEvent(Event);
  134.         end;
  135.       cmClipShow:
  136.         with ClipboardWindow^ do
  137.         begin
  138.           Select;
  139.           Show;
  140.           ClearEvent(Event);
  141.         end;
  142.       cmNew:
  143.         begin
  144.           NewWindow;
  145.           ClearEvent(Event);
  146.         end;
  147.       cmOpen:
  148.         begin
  149.           OpenWindow;
  150.           ClearEvent(Event);
  151.         end;
  152.       cmOptionsVideo:
  153.         begin
  154.           SetScreenMode(ScreenMode xor smFont8x8);
  155.           ClearEvent(Event);
  156.         end;
  157.       cmAbout:
  158.         begin
  159.           DoAboutBox;
  160.           ClearEvent(Event);
  161.         end;
  162.     end;
  163.   end;
  164. end;
  165.  
  166. procedure TTutorApp.InitMenuBar;
  167. begin
  168.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  169. end;
  170.  
  171. procedure TTutorApp.InitStatusLine;
  172. var
  173.   R: TRect;
  174. begin
  175.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  176.   GetExtent(R);
  177.   StatusLine^.MoveTo(0, R.B.Y - 1);
  178. end;
  179.  
  180. procedure TTutorApp.LoadDesktop;
  181. var
  182.   DesktopFile: TBufStream;
  183.   TempDesktop: PDesktop;
  184.   R: TRect;
  185. begin
  186.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  187.   TempDesktop := PDesktop(DesktopFile.Get);
  188.   DesktopFile.Done;
  189.   if ValidView(TempDesktop) <> nil then
  190.   begin
  191.     Desktop^.Delete(ClipboardWindow);
  192.     Delete(Desktop);
  193.     Dispose(Desktop, Done);
  194.     Desktop := TempDesktop;
  195.     Insert(Desktop);
  196.     GetExtent(R);
  197.     R.Grow(0, -1);
  198.     Desktop^.Locate(R);
  199.     InsertWindow(ClipboardWindow);
  200.   end;
  201. end;
  202.  
  203. procedure TTutorApp.NewWindow;
  204. var
  205.   R: TRect;
  206.   TheWindow: PEditWindow;
  207. begin
  208.   R.Assign(0, 0, 60, 20);
  209.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  210.   InsertWindow(TheWindow);
  211. end;
  212.  
  213. procedure TTutorApp.OpenOrderWindow;
  214. begin
  215.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  216.   begin
  217.     OrderWindow := New(POrderWindow, Init);
  218.     InsertWindow(OrderWindow);
  219.   end
  220.   else
  221.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  222. end;
  223.  
  224. procedure TTutorApp.OpenWindow;
  225. var
  226.   R: TRect;
  227.   FileDialog: PFileDialog;
  228.   TheFile: FNameStr;
  229. const
  230.   FDOptions: Word = fdOKButton or fdOpenButton;
  231. begin
  232.   TheFile := '*.*';
  233.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  234.     FDOptions, 1));
  235.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  236.   begin
  237.     R.Assign(0, 0, 75, 20);
  238.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  239.   end;
  240. end;
  241.  
  242. procedure TTutorApp.SaveDesktop;
  243. var
  244.   DesktopFile: TBufStream;
  245. begin
  246.   Desktop^.Delete(ClipboardWindow);
  247.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  248.   DesktopFile.Put(Desktop);
  249.   DesktopFile.Done;
  250.   InsertWindow(ClipboardWindow);
  251. end;
  252.  
  253. var
  254.   TutorApp: TTutorApp;
  255.  
  256. begin
  257.   TutorApp.Init;
  258.   TutorApp.Run;
  259.   TutorApp.Done;
  260. end.
  261.