dos_compilers/Borland Turbo Pascal v6/TVDEMOS/TVFORMS.PAS
2024-07-02 07:11:05 -07:00

195 lines
5.3 KiB
Plaintext

{************************************************}
{ }
{ Turbo Pascal 6.0 }
{ Turbo Vision Forms Demo }
{ Copyright (c) 1990 by Borland International }
{ }
{************************************************}
program TVForms;
{$M 8192,8192,655360}
{$X+,S-}
{ This Turbo Vision application uses forms to enter and edit data
in a collection. Two data files, PHONENUM.TVF and PARTS.TVF, are
provided and can be loaded using this application's File|Open menu.
The .TVF files were created by GENFORMS.BAT, which compiles and
and runs GENFORM.PAS. You can create additional data files by
copying and modifying GENPARTS.PAS or GENPHONE.PAS and then
incorporating your new unit into GENFORM.PAS and GENFORMS.BAT.
}
uses
Dos, Objects, Memory, Drivers, Views, Menus, Dialogs, HistList,
Stddlg, App, MsgBox, Editors, DataColl, ListDlg, Forms, Fields,
FormCmds;
type
PFormApp = ^TFormApp;
TFormApp = object(TApplication)
constructor Init;
procedure HandleEvent(var Event: TEvent); virtual;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
end;
{ TFormApp }
constructor TFormApp.Init;
var
Event: TEvent;
begin
TApplication.Init;
{ Register all objects that will be loaded or stored on streams }
RegisterObjects;
RegisterViews;
RegisterDialogs;
RegisterDataColl;
RegisterForms;
RegisterEditors;
RegisterFields;
{ Display about box }
Event.What := evCommand;
Event.Command := cmAboutBox;
PutEvent(Event);
end;
procedure TFormApp.HandleEvent(var Event: TEvent);
var
NewMode: Word;
procedure ChangeDir;
var
D: PChDirDialog;
begin
D := New(PChDirDialog, Init(0, hlChangeDir));
if ValidView(D) <> nil then
begin
DeskTop^.ExecView(D);
Dispose(D, Done);
end;
end;
procedure DosShell;
begin
DoneSysError;
DoneEvents;
DoneVideo;
DoneMemory;
SetMemTop(HeapPtr);
PrintStr('Type EXIT to return...');
SwapVectors;
Exec(GetEnv('COMSPEC'), '');
SwapVectors;
SetMemTop(HeapEnd);
InitMemory;
InitVideo;
InitEvents;
InitSysError;
Redraw;
end;
procedure OpenListDialog;
var
D: PFileDialog;
FileName: ^PathStr;
ListEditor: PDialog;
begin
D := New(PFileDialog, Init('*.TVF', 'Open File',
'~N~ame', fdOpenButton, hlOpenListDlg));
if ValidView(D) <> nil then
begin
if Desktop^.ExecView(D) <> cmCancel then
begin
New(FileName);
D^.GetFileName(FileName^);
if not FileExists(FileName^) then
MessageBox('Cannot find file (%s).', @FileName, mfError + mfOkButton)
else
begin
{ If ListEditor exists, select it; otherwise, open new one }
ListEditor := Message(Desktop, evBroadcast, cmEditingFile, FileName);
if ListEditor = nil then
DeskTop^.Insert(ValidView(New(PListDialog, Init(FileName^))))
else ListEditor^.Select;
end;
Dispose(FileName);
end;
Dispose(D, Done);
end;
end;
begin
TApplication.HandleEvent(Event);
if Event.What = evCommand then
begin
case Event.Command of
cmListOpen: OpenListDialog;
cmChangeDir: ChangeDir;
cmDosShell: DosShell;
cmAboutBox: MessageBox(#3'Turbo Pascal 6.0'#13#13#3 +
'Turbo Vision Forms Demo', nil, mfInformation + mfOkButton);
cmVideoMode:
begin
NewMode := ScreenMode xor smFont8x8;
if NewMode and smFont8x8 <> 0 then
ShadowSize.X := 1
else ShadowSize.X := 2;
SetScreenMode(NewMode);
end;
else
Exit;
end;
ClearEvent(Event);
end;
end;
procedure TFormApp.InitMenuBar;
var
R: TRect;
begin
GetExtent(R);
R.B.Y := R.A.Y + 1;
MenuBar := New(PMenuBar, Init(R, NewMenu(
NewSubMenu('~'#240'~', hcNoContext, NewMenu(
NewItem('~V~ideo mode','', kbNoKey, cmVideoMode, hcNoContext,
NewLine(
NewItem('~A~bout...','', kbNoKey, cmAboutBox, hcNoContext, nil)))),
NewSubMenu('~F~ile', hcNoContext, NewMenu(
NewItem('~O~pen...','F3', kbF3, cmListOpen, hcNoContext,
NewItem('~S~ave','F2', kbF2, cmListSave, hcNoContext,
NewLine(
NewItem('~C~hange directory...','', kbNoKey, cmChangeDir, hcNoContext,
NewItem('~D~OS shell','', kbNoKey, cmDosShell, hcNoContext,
NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil))))))),
NewSubMenu('~W~indow', hcNoContext, NewMenu(
NewItem('~M~ove','Ctrl-F5', kbCtrlF5, cmResize, hcNoContext,
NewItem('~N~ext','F6', kbF6, cmNext, hcNoContext,
NewItem('~P~rev','Shift-F6', kbShiftF6, cmPrev, hcNoContext,
NewItem('~C~lose','Alt-F3', kbAltF3, cmClose, hcNoContext, nil))))), nil))))))
end;
procedure TFormApp.InitStatusLine;
var
R: TRect;
begin
GetExtent(R);
R.A.Y := R.B.Y-1;
StatusLine := New(PStatusLine, Init(R,
NewStatusDef(0, $FFFF,
NewStatusKey('~F2~ Save', kbF2, cmListSave,
NewStatusKey('~F3~ Open', kbF3, cmListOpen,
NewStatusKey('~F10~ Menu', kbF10, cmMenu,
NewStatusKey('', kbCtrlF5, cmResize, nil)))), nil)));
end;
var
FormApp: TFormApp;
begin
FormApp.Init;
FormApp.Run;
FormApp.Done;
end.