home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / TPASCAL3.ZIP / TVDEMOS.ZIP / TVFORMS.PAS < prev    next >
Pascal/Delphi Source File  |  1991-06-11  |  5KB  |  195 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Pascal 6.0                             }
  4. {   Turbo Vision Forms Demo                      }
  5. {   Copyright (c) 1990 by Borland International  }
  6. {                                                }
  7. {************************************************}
  8.  
  9. program TVForms;
  10.  
  11. {$M 8192,8192,655360}
  12. {$X+,S-}
  13.  
  14. { This Turbo Vision application uses forms to enter and edit data
  15.   in a collection. Two data files, PHONENUM.TVF and PARTS.TVF, are
  16.   provided and can be loaded using this application's File|Open menu.
  17.   The .TVF files were created by GENFORMS.BAT, which compiles and
  18.   and runs GENFORM.PAS. You can create additional data files by
  19.   copying and modifying GENPARTS.PAS or GENPHONE.PAS and then
  20.   incorporating your new unit into GENFORM.PAS and GENFORMS.BAT.
  21. }
  22.  
  23. uses
  24.   Dos, Objects, Memory, Drivers, Views, Menus, Dialogs, HistList,
  25.   Stddlg, App, MsgBox, Editors, DataColl, ListDlg, Forms, Fields,
  26.   FormCmds;
  27.  
  28. type
  29.   PFormApp = ^TFormApp;
  30.   TFormApp = object(TApplication)
  31.     constructor Init;
  32.     procedure HandleEvent(var Event: TEvent); virtual;
  33.     procedure InitMenuBar; virtual;
  34.     procedure InitStatusLine; virtual;
  35.   end;
  36.  
  37. { TFormApp }
  38. constructor TFormApp.Init;
  39. var
  40.   Event: TEvent;
  41. begin
  42.   TApplication.Init;
  43.   { Register all objects that will be loaded or stored on streams }
  44.   RegisterObjects;
  45.   RegisterViews;
  46.   RegisterDialogs;
  47.   RegisterDataColl;
  48.   RegisterForms;
  49.   RegisterEditors;
  50.   RegisterFields;
  51.  
  52.   { Display about box }
  53.   Event.What := evCommand;
  54.   Event.Command := cmAboutBox;
  55.   PutEvent(Event);
  56. end;
  57.  
  58. procedure TFormApp.HandleEvent(var Event: TEvent);
  59. var
  60.   NewMode: Word;
  61.  
  62. procedure ChangeDir;
  63. var
  64.   D: PChDirDialog;
  65. begin
  66.   D := New(PChDirDialog, Init(0, hlChangeDir));
  67.   if ValidView(D) <> nil then
  68.   begin
  69.     DeskTop^.ExecView(D);
  70.     Dispose(D, Done);
  71.   end;
  72. end;
  73.  
  74. procedure DosShell;
  75. begin
  76.   DoneSysError;
  77.   DoneEvents;
  78.   DoneVideo;
  79.   DoneMemory;
  80.   SetMemTop(HeapPtr);
  81.   PrintStr('Type EXIT to return...');
  82.   SwapVectors;
  83.   Exec(GetEnv('COMSPEC'), '');
  84.   SwapVectors;
  85.   SetMemTop(HeapEnd);
  86.   InitMemory;
  87.   InitVideo;
  88.   InitEvents;
  89.   InitSysError;
  90.   Redraw;
  91. end;
  92.  
  93. procedure OpenListDialog;
  94. var
  95.   D: PFileDialog;
  96.   FileName: ^PathStr;
  97.   ListEditor: PDialog;
  98. begin
  99.   D := New(PFileDialog, Init('*.TVF', 'Open File',
  100.     '~N~ame', fdOpenButton, hlOpenListDlg));
  101.   if ValidView(D) <> nil then
  102.   begin
  103.     if Desktop^.ExecView(D) <> cmCancel then
  104.     begin
  105.       New(FileName);
  106.       D^.GetFileName(FileName^);
  107.       if not FileExists(FileName^) then
  108.         MessageBox('Cannot find file (%s).', @FileName, mfError + mfOkButton)
  109.       else
  110.       begin
  111.         { If ListEditor exists, select it; otherwise, open new one }
  112.         ListEditor := Message(Desktop, evBroadcast, cmEditingFile, FileName);
  113.         if ListEditor = nil then
  114.           DeskTop^.Insert(ValidView(New(PListDialog, Init(FileName^))))
  115.         else ListEditor^.Select;
  116.       end;
  117.       Dispose(FileName);
  118.     end;
  119.     Dispose(D, Done);
  120.   end;
  121. end;
  122.  
  123. begin
  124.   TApplication.HandleEvent(Event);
  125.   if Event.What = evCommand then
  126.   begin
  127.     case Event.Command of
  128.       cmListOpen: OpenListDialog;
  129.       cmChangeDir: ChangeDir;
  130.       cmDosShell: DosShell;
  131.       cmAboutBox: MessageBox(#3'Turbo Pascal 6.0'#13#13#3 +
  132.         'Turbo Vision Forms Demo', nil, mfInformation + mfOkButton);
  133.       cmVideoMode:
  134.         begin
  135.           NewMode := ScreenMode xor smFont8x8;
  136.           if NewMode and smFont8x8 <> 0 then
  137.             ShadowSize.X := 1
  138.           else ShadowSize.X := 2;
  139.           SetScreenMode(NewMode);
  140.         end;
  141.     else
  142.       Exit;
  143.     end;
  144.     ClearEvent(Event);
  145.   end;
  146. end;
  147.  
  148. procedure TFormApp.InitMenuBar;
  149. var
  150.   R: TRect;
  151. begin
  152.   GetExtent(R);
  153.   R.B.Y := R.A.Y + 1;
  154.   MenuBar := New(PMenuBar, Init(R, NewMenu(
  155.     NewSubMenu('~'#240'~', hcNoContext, NewMenu(
  156.  
  157.       NewItem('~V~ideo mode','', kbNoKey, cmVideoMode, hcNoContext,
  158.       NewLine(
  159.       NewItem('~A~bout...','', kbNoKey, cmAboutBox, hcNoContext, nil)))),
  160.     NewSubMenu('~F~ile', hcNoContext, NewMenu(
  161.       NewItem('~O~pen...','F3', kbF3, cmListOpen, hcNoContext,
  162.       NewItem('~S~ave','F2', kbF2, cmListSave, hcNoContext,
  163.       NewLine(
  164.       NewItem('~C~hange directory...','', kbNoKey, cmChangeDir, hcNoContext,
  165.       NewItem('~D~OS shell','', kbNoKey, cmDosShell, hcNoContext,
  166.       NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil))))))),
  167.     NewSubMenu('~W~indow', hcNoContext, NewMenu(
  168.       NewItem('~M~ove','Ctrl-F5', kbCtrlF5, cmResize, hcNoContext,
  169.       NewItem('~N~ext','F6', kbF6, cmNext, hcNoContext,
  170.       NewItem('~P~rev','Shift-F6', kbShiftF6, cmPrev, hcNoContext,
  171.       NewItem('~C~lose','Alt-F3', kbAltF3, cmClose, hcNoContext, nil))))), nil))))))
  172. end;
  173.  
  174. procedure TFormApp.InitStatusLine;
  175. var
  176.   R: TRect;
  177. begin
  178.   GetExtent(R);
  179.   R.A.Y := R.B.Y-1;
  180.   StatusLine := New(PStatusLine, Init(R,
  181.     NewStatusDef(0, $FFFF,
  182.       NewStatusKey('~F2~ Save', kbF2, cmListSave,
  183.       NewStatusKey('~F3~ Open', kbF3, cmListOpen,
  184.       NewStatusKey('~F10~ Menu', kbF10, cmMenu,
  185.       NewStatusKey('', kbCtrlF5, cmResize, nil)))), nil)));
  186. end;
  187.  
  188. var
  189.   FormApp: TFormApp;
  190. begin
  191.   FormApp.Init;
  192.   FormApp.Run;
  193.   FormApp.Done;
  194. end.
  195.