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

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor08c;
  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.   Field: PInputLine;
  60.   Cluster: PCluster;
  61.   Memo: PMemo;
  62. begin
  63.   R.Assign(0, 0, 60, 17);
  64.   inherited Init(R, 'Orders');
  65.   Options := Options or ofCentered;
  66.   HelpCtx := $F000;
  67.  
  68.   R.Assign(13, 2, 23, 3);
  69.   Field := New(PInputLine, Init(R, 8));
  70.   Insert(Field);
  71.   R.Assign(2, 2, 12, 3);
  72.   Insert(New(PLabel, Init(R, '~O~rder #:', Field)));
  73.  
  74.   R.Assign(43, 2, 53, 3);
  75.   Field := New(PInputLine, Init(R, 8));
  76.   Insert(Field);
  77.   R.Assign(26, 2, 41, 3);
  78.   Insert(New(PLabel, Init(R, '~D~ate of order:', Field)));
  79.  
  80.   R.Assign(13, 4, 23, 5);
  81.   Field := New(PInputLine, Init(R, 8));
  82.   Insert(Field);
  83.   R.Assign(2, 4, 12, 5);
  84.   Insert(New(PLabel, Init(R, '~S~tock #:', Field)));
  85.  
  86.   R.Assign(46, 4, 53, 5);
  87.   Field := New(PInputLine, Init(R, 5));
  88.   Insert(Field);
  89.   R.Assign(26, 4, 44, 5);
  90.   Insert(New(PLabel, Init(R, '~Q~uantity ordered:', Field)));
  91.  
  92.   R.Assign(3, 7, 57, 8);
  93.   Cluster := New(PRadioButtons, Init(R,
  94.     NewSItem('Cash   ',
  95.     NewSItem('Check  ',
  96.     NewSItem('P.O.   ',
  97.     NewSItem('Account', nil))))));
  98.   Insert(Cluster);
  99.   R.Assign(2, 6, 21, 7);
  100.   Insert(New(PLabel, Init(R, '~P~ayment method:', Cluster)));
  101.  
  102.   R.Assign(22, 8, 37, 9);
  103.   Cluster := New(PCheckBoxes, Init(R, NewSItem('~R~eceived', nil)));
  104.   Insert(Cluster);
  105.  
  106.   R.Assign(3, 10, 57, 13);
  107.   Memo := New(PMemo, Init(R, nil, nil, nil, 255));
  108.   Insert(Memo);
  109.   R.Assign(2, 9, 9, 10);
  110.   Insert(New(PLabel, Init(R, 'Notes:', Memo)));
  111.  
  112.   R.Assign(2, 14, 12, 16);
  113.   Insert(New(PButton, Init(R, '~N~ew', cmOrderNew, bfNormal)));
  114.   R.Assign(13, 14, 23, 16);
  115.   Insert(New(PButton, Init(R, '~S~ave', cmOrderSave, bfDefault)));
  116.   R.Assign(24, 14, 34, 16);
  117.   Insert(New(PButton, Init(R, 'Re~v~ert', cmOrderCancel, bfNormal)));
  118.   R.Assign(35, 14, 45, 16);
  119.   Insert(New(PButton, Init(R, 'N~e~xt', cmOrderNext, bfNormal)));
  120.   R.Assign(46, 14, 56, 16);
  121.   Insert(New(PButton, Init(R, '~P~rev', cmOrderPrev, bfNormal)));
  122.   SelectNext(False);
  123. end;
  124.  
  125. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  126. begin
  127.   inherited HandleEvent(Event);
  128.   if (Event.What = evBroadcast) and
  129.     (Event.Command = cmFindOrderWindow) then
  130.     ClearEvent(Event);
  131. end;
  132.  
  133. constructor TTutorApp.Init;
  134. var
  135.   R: TRect;
  136. begin
  137.   MaxHeapSize := 8192;
  138.   EditorDialog := StdEditorDialog;
  139.   StreamError := @TutorStreamError;
  140.   RegisterMenus;
  141.   RegisterObjects;
  142.   RegisterViews;
  143.   RegisterApp;
  144.   RegisterEditors;
  145.   RegisterDialogs;
  146.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  147.   inherited Init;
  148.   DisableCommands([cmStockWin, cmSupplierWin]);
  149.   Desktop^.GetExtent(R);
  150.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  151.   if ValidView(ClipboardWindow) <> nil then
  152.   begin
  153.     ClipboardWindow^.Hide;
  154.     InsertWindow(ClipboardWindow);
  155.     Clipboard := ClipboardWindow^.Editor;
  156.     Clipboard^.CanUndo := False;
  157.   end;
  158. end;
  159.  
  160. destructor TTutorApp.Done;
  161. begin
  162.   ResFile.Done;
  163.   inherited Done;
  164. end;
  165.  
  166. procedure TTutorApp.DoAboutBox;
  167. begin
  168.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  169. end;
  170.  
  171. procedure TTutorApp.HandleEvent(var Event: TEvent);
  172. var
  173.   R: TRect;
  174. begin
  175.   inherited HandleEvent(Event);
  176.   if Event.What = evCommand then
  177.   begin
  178.     case Event.Command of
  179.       cmOrderWin:
  180.         begin
  181.           OpenOrderWindow;
  182.           ClearEvent(Event);
  183.         end;
  184.       cmOptionsLoad:
  185.         begin
  186.           LoadDesktop;
  187.           ClearEvent(Event);
  188.         end;
  189.       cmOptionsSave:
  190.         begin
  191.           SaveDesktop;
  192.           ClearEvent(Event);
  193.         end;
  194.       cmClipShow:
  195.         with ClipboardWindow^ do
  196.         begin
  197.           Select;
  198.           Show;
  199.           ClearEvent(Event);
  200.         end;
  201.       cmNew:
  202.         begin
  203.           NewWindow;
  204.           ClearEvent(Event);
  205.         end;
  206.       cmOpen:
  207.         begin
  208.           OpenWindow;
  209.           ClearEvent(Event);
  210.         end;
  211.       cmOptionsVideo:
  212.         begin
  213.           SetScreenMode(ScreenMode xor smFont8x8);
  214.           ClearEvent(Event);
  215.         end;
  216.       cmAbout:
  217.         begin
  218.           DoAboutBox;
  219.           ClearEvent(Event);
  220.         end;
  221.     end;
  222.   end;
  223. end;
  224.  
  225. procedure TTutorApp.InitMenuBar;
  226. begin
  227.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  228. end;
  229.  
  230. procedure TTutorApp.InitStatusLine;
  231. var
  232.   R: TRect;
  233. begin
  234.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  235.   GetExtent(R);
  236.   StatusLine^.MoveTo(0, R.B.Y - 1);
  237. end;
  238.  
  239. procedure TTutorApp.LoadDesktop;
  240. var
  241.   DesktopFile: TBufStream;
  242.   TempDesktop: PDesktop;
  243.   R: TRect;
  244. begin
  245.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  246.   TempDesktop := PDesktop(DesktopFile.Get);
  247.   DesktopFile.Done;
  248.   if ValidView(TempDesktop) <> nil then
  249.   begin
  250.     Desktop^.Delete(ClipboardWindow);
  251.     Delete(Desktop);
  252.     Dispose(Desktop, Done);
  253.     Desktop := TempDesktop;
  254.     Insert(Desktop);
  255.     GetExtent(R);
  256.     R.Grow(0, -1);
  257.     Desktop^.Locate(R);
  258.     InsertWindow(ClipboardWindow);
  259.   end;
  260. end;
  261.  
  262. procedure TTutorApp.NewWindow;
  263. var
  264.   R: TRect;
  265.   TheWindow: PEditWindow;
  266. begin
  267.   R.Assign(0, 0, 60, 20);
  268.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  269.   InsertWindow(TheWindow);
  270. end;
  271.  
  272. procedure TTutorApp.OpenOrderWindow;
  273. begin
  274.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  275.   begin
  276.     OrderWindow := New(POrderWindow, Init);
  277.     InsertWindow(OrderWindow);
  278.   end
  279.   else
  280.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  281. end;
  282.  
  283. procedure TTutorApp.OpenWindow;
  284. var
  285.   R: TRect;
  286.   FileDialog: PFileDialog;
  287.   TheFile: FNameStr;
  288. const
  289.   FDOptions: Word = fdOKButton or fdOpenButton;
  290. begin
  291.   TheFile := '*.*';
  292.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  293.     FDOptions, 1));
  294.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  295.   begin
  296.     R.Assign(0, 0, 75, 20);
  297.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  298.   end;
  299. end;
  300.  
  301. procedure TTutorApp.SaveDesktop;
  302. var
  303.   DesktopFile: TBufStream;
  304. begin
  305.   Desktop^.Delete(ClipboardWindow);
  306.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  307.   DesktopFile.Put(Desktop);
  308.   DesktopFile.Done;
  309.   InsertWindow(ClipboardWindow);
  310. end;
  311.  
  312. var
  313.   TutorApp: TTutorApp;
  314.  
  315. begin
  316.   TutorApp.Init;
  317.   TutorApp.Run;
  318.   TutorApp.Done;
  319. end.
  320.