home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Pascal / BPASCAL.700 / D11 / DDOCDEMO.ZIP / TUTOR10.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-10-01  |  9.0 KB  |  366 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor10;
  9.  
  10. uses Memory, TutConst, Drivers, Objects, Views, Menus, App, Dialogs,
  11.   Editors, StdDlg, Validate;
  12.  
  13. type
  14.   POrder = ^TOrder;
  15.   TOrder = record
  16.     OrderNum: string[8];
  17.     OrderDate: string[8];
  18.     StockNum: string[8];
  19.     Quantity: string[5];
  20.     Payment, Received, MemoLen: Word;
  21.     MemoText: array[0..255] of Char;
  22.   end;
  23.  
  24.   POrderWindow = ^TOrderWindow;
  25.   TOrderWindow = object(TDialog)
  26.     constructor Init;
  27.     procedure HandleEvent(var Event: TEvent); virtual;
  28.   end;
  29.  
  30.   TTutorApp = object(TApplication)
  31.     ClipboardWindow: PEditWindow;
  32.     OrderWindow: POrderWindow;
  33.     constructor Init;
  34.     destructor Done; virtual;
  35.     procedure DoAboutBox;
  36.     procedure HandleEvent(var Event: TEvent); virtual;
  37.     procedure InitMenuBar; virtual;
  38.     procedure InitStatusLine; virtual;
  39.     procedure LoadDesktop;
  40.     procedure NewWindow;
  41.     procedure OpenOrderWindow;
  42.     procedure OpenWindow;
  43.     procedure SaveDesktop;
  44.     procedure SaveOrderData;
  45.     procedure ShowOrder(AOrderNum: Integer);
  46.   end;
  47.  
  48. var
  49.   ResFile: TResourceFile;
  50.   OrderInfo: TOrder;
  51.  
  52. procedure TutorStreamError(var S: TStream); far;
  53. var
  54.   ErrorMessage: String;
  55. begin
  56.   case S.Status of
  57.     stError: ErrorMessage := 'Stream access error';
  58.     stInitError: ErrorMessage := 'Cannot initialize stream';
  59.     stReadError: ErrorMessage := 'Read beyond end of stream';
  60.     stWriteError: ErrorMessage := 'Cannot expand stream';
  61.     stGetError: ErrorMessage := 'Unregistered type read from stream';
  62.     stPutError: ErrorMessage := 'Unregistered type written to stream';
  63.     end;
  64.   DoneVideo;
  65.   PrintStr('Error: ' + ErrorMessage);
  66.   Halt(S.Status);
  67. end;
  68.  
  69. constructor TOrderWindow.Init;
  70. var
  71.   R: TRect;
  72.   Field: PInputLine;
  73.   Cluster: PCluster;
  74.   Memo: PMemo;
  75. begin
  76.   R.Assign(0, 0, 60, 17);
  77.   inherited Init(R, 'Orders');
  78.   Options := Options or ofCentered;
  79.   HelpCtx := $F000;
  80.  
  81.   R.Assign(13, 2, 23, 3);
  82.   Field := New(PInputLine, Init(R, 8));
  83.   Field^.SetValidator(New(PRangeValidator, Init(1, 99999)));
  84.   Insert(Field);
  85.   R.Assign(2, 2, 12, 3);
  86.   Insert(New(PLabel, Init(R, '~O~rder #:', Field)));
  87.  
  88.   R.Assign(43, 2, 53, 3);
  89.   Field := New(PInputLine, Init(R, 8));
  90.   Field^.SetValidator(New(PPXPictureValidator,
  91.     Init('{#[#]}/{#[#]}/{##[##]}', True)));
  92.   Insert(Field);
  93.   R.Assign(26, 2, 41, 3);
  94.   Insert(New(PLabel, Init(R, '~D~ate of order:', Field)));
  95.  
  96.   R.Assign(13, 4, 23, 5);
  97.   Field := New(PInputLine, Init(R, 8));
  98.   Field^.SetValidator(New(PPXPictureValidator, Init('&&&-####', True)));
  99.   Insert(Field);
  100.   R.Assign(2, 4, 12, 5);
  101.   Insert(New(PLabel, Init(R, '~S~tock #:', Field)));
  102.  
  103.   R.Assign(46, 4, 53, 5);
  104.   Field := New(PInputLine, Init(R, 5));
  105.   Field^.SetValidator(New(PRangeValidator, Init(1, 99999)));
  106.   Insert(Field);
  107.   R.Assign(26, 4, 44, 5);
  108.   Insert(New(PLabel, Init(R, '~Q~uantity ordered:', Field)));
  109.  
  110.   R.Assign(3, 7, 57, 8);
  111.   Cluster := New(PRadioButtons, Init(R,
  112.     NewSItem('Cash   ',
  113.     NewSItem('Check  ',
  114.     NewSItem('P.O.   ',
  115.     NewSItem('Account', nil))))));
  116.   Insert(Cluster);
  117.   R.Assign(2, 6, 21, 7);
  118.   Insert(New(PLabel, Init(R, '~P~ayment method:', Cluster)));
  119.  
  120.   R.Assign(22, 8, 37, 9);
  121.   Cluster := New(PCheckBoxes, Init(R, NewSItem('~R~eceived', nil)));
  122.   Insert(Cluster);
  123.  
  124.   R.Assign(3, 10, 57, 13);
  125.   Memo := New(PMemo, Init(R, nil, nil, nil, 255));
  126.   Insert(Memo);
  127.   R.Assign(2, 9, 9, 10);
  128.   Insert(New(PLabel, Init(R, 'Notes:', Memo)));
  129.  
  130.   R.Assign(2, 14, 12, 16);
  131.   Insert(New(PButton, Init(R, '~N~ew', cmOrderNew, bfNormal)));
  132.   R.Assign(13, 14, 23, 16);
  133.   Insert(New(PButton, Init(R, '~S~ave', cmOrderSave, bfDefault)));
  134.   R.Assign(24, 14, 34, 16);
  135.   Insert(New(PButton, Init(R, 'Re~v~ert', cmOrderCancel, bfNormal)));
  136.   R.Assign(35, 14, 45, 16);
  137.   Insert(New(PButton, Init(R, 'N~e~xt', cmOrderNext, bfNormal)));
  138.   R.Assign(46, 14, 56, 16);
  139.   Insert(New(PButton, Init(R, '~P~rev', cmOrderPrev, bfNormal)));
  140.   SelectNext(False);
  141. end;
  142.  
  143. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  144. begin
  145.   inherited HandleEvent(Event);
  146.   if (Event.What = evBroadcast) and
  147.     (Event.Command = cmFindOrderWindow) then
  148.     ClearEvent(Event);
  149. end;
  150.  
  151. constructor TTutorApp.Init;
  152. var
  153.   R: TRect;
  154. begin
  155.   MaxHeapSize := 8192;
  156.   EditorDialog := StdEditorDialog;
  157.   StreamError := @TutorStreamError;
  158.   RegisterMenus;
  159.   RegisterObjects;
  160.   RegisterViews;
  161.   RegisterApp;
  162.   RegisterEditors;
  163.   RegisterDialogs;
  164.   RegisterValidate;
  165.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  166.   inherited Init;
  167.   DisableCommands([cmStockWin, cmSupplierWin]);
  168.   Desktop^.GetExtent(R);
  169.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  170.   if ValidView(ClipboardWindow) <> nil then
  171.   begin
  172.     ClipboardWindow^.Hide;
  173.     InsertWindow(ClipboardWindow);
  174.     Clipboard := ClipboardWindow^.Editor;
  175.     Clipboard^.CanUndo := False;
  176.   end;
  177.   with OrderInfo do
  178.   begin
  179.     OrderNum := '42';
  180.     OrderDate := '01/15/61';
  181.     StockNum := 'AAA-9999';
  182.     Quantity := '1';
  183.     Payment := 2;
  184.     Received := 0;
  185.     MemoLen := 0;
  186.   end;
  187. end;
  188.  
  189. destructor TTutorApp.Done;
  190. begin
  191.   ResFile.Done;
  192.   inherited Done;
  193. end;
  194.  
  195. procedure TTutorApp.DoAboutBox;
  196. begin
  197.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  198. end;
  199.  
  200. procedure TTutorApp.HandleEvent(var Event: TEvent);
  201. var
  202.   R: TRect;
  203. begin
  204.   inherited HandleEvent(Event);
  205.   if Event.What = evCommand then
  206.   begin
  207.     case Event.Command of
  208.       cmOrderSave:
  209.         begin
  210.           SaveOrderData;
  211.           ClearEvent(Event);
  212.         end;
  213.       cmOrderWin:
  214.         begin
  215.           OpenOrderWindow;
  216.           ClearEvent(Event);
  217.         end;
  218.       cmOptionsLoad:
  219.         begin
  220.           LoadDesktop;
  221.           ClearEvent(Event);
  222.         end;
  223.       cmOptionsSave:
  224.         begin
  225.           SaveDesktop;
  226.           ClearEvent(Event);
  227.         end;
  228.       cmClipShow:
  229.         with ClipboardWindow^ do
  230.         begin
  231.           Select;
  232.           Show;
  233.           ClearEvent(Event);
  234.         end;
  235.       cmNew:
  236.         begin
  237.           NewWindow;
  238.           ClearEvent(Event);
  239.         end;
  240.       cmOpen:
  241.         begin
  242.           OpenWindow;
  243.           ClearEvent(Event);
  244.         end;
  245.       cmOptionsVideo:
  246.         begin
  247.           SetScreenMode(ScreenMode xor smFont8x8);
  248.           ClearEvent(Event);
  249.         end;
  250.       cmAbout:
  251.         begin
  252.           DoAboutBox;
  253.           ClearEvent(Event);
  254.         end;
  255.     end;
  256.   end;
  257. end;
  258.  
  259. procedure TTutorApp.InitMenuBar;
  260. begin
  261.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  262. end;
  263.  
  264. procedure TTutorApp.InitStatusLine;
  265. var
  266.   R: TRect;
  267. begin
  268.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  269.   GetExtent(R);
  270.   StatusLine^.MoveTo(0, R.B.Y - 1);
  271. end;
  272.  
  273. procedure TTutorApp.LoadDesktop;
  274. var
  275.   DesktopFile: TBufStream;
  276.   TempDesktop: PDesktop;
  277.   R: TRect;
  278. begin
  279.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  280.   TempDesktop := PDesktop(DesktopFile.Get);
  281.   DesktopFile.Done;
  282.   if ValidView(TempDesktop) <> nil then
  283.   begin
  284.     Desktop^.Delete(ClipboardWindow);
  285.     Delete(Desktop);
  286.     Dispose(Desktop, Done);
  287.     Desktop := TempDesktop;
  288.     Insert(Desktop);
  289.     GetExtent(R);
  290.     R.Grow(0, -1);
  291.     Desktop^.Locate(R);
  292.     InsertWindow(ClipboardWindow);
  293.   end;
  294. end;
  295.  
  296. procedure TTutorApp.NewWindow;
  297. var
  298.   R: TRect;
  299.   TheWindow: PEditWindow;
  300. begin
  301.   R.Assign(0, 0, 60, 20);
  302.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  303.   InsertWindow(TheWindow);
  304. end;
  305.  
  306. procedure TTutorApp.OpenOrderWindow;
  307. begin
  308.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  309.   begin
  310.     OrderWindow := New(POrderWindow, Init);
  311.     InsertWindow(OrderWindow);
  312.   end
  313.   else
  314.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  315.   ShowOrder(0);
  316. end;
  317.  
  318. procedure TTutorApp.OpenWindow;
  319. var
  320.   R: TRect;
  321.   FileDialog: PFileDialog;
  322.   TheFile: FNameStr;
  323. const
  324.   FDOptions: Word = fdOKButton or fdOpenButton;
  325. begin
  326.   TheFile := '*.*';
  327.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  328.     FDOptions, 1));
  329.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  330.   begin
  331.     R.Assign(0, 0, 75, 20);
  332.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  333.   end;
  334. end;
  335.  
  336. procedure TTutorApp.SaveDesktop;
  337. var
  338.   DesktopFile: TBufStream;
  339. begin
  340.   Desktop^.Delete(ClipboardWindow);
  341.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  342.   DesktopFile.Put(Desktop);
  343.   DesktopFile.Done;
  344.   InsertWindow(ClipboardWindow);
  345. end;
  346.  
  347. procedure TTutorApp.SaveOrderData;
  348. begin
  349.   if OrderWindow^.Valid(cmClose) then
  350.     OrderWindow^.GetData(OrderInfo);
  351. end;
  352.  
  353. procedure TTutorApp.ShowOrder(AOrderNum: Integer);
  354. begin
  355.   OrderWindow^.SetData(OrderInfo);
  356. end;
  357.  
  358. var
  359.   TutorApp: TTutorApp;
  360.  
  361. begin
  362.   TutorApp.Init;
  363.   TutorApp.Run;
  364.   TutorApp.Done;
  365. end.
  366.