dos_compilers/Borland Turbo Pascal v7/EXAMPLES/TVFM/TVFM.PAS
2024-07-02 08:21:37 -07:00

230 lines
5.4 KiB
Plaintext

{************************************************}
{ }
{ Turbo Vision File Manager Demo }
{ Copyright (c) 1992 by Borland International }
{ }
{************************************************}
{$M 16384,8192,655360}
{$X+,V-}
program TVFM;
uses Objects, Drivers, Memory, App, Views, Menus, Dialogs, StdDlg, Globals,
Dos, MsgBox, Equ, Tools, TreeWin, Colors, Assoc, Trash, FileFind;
{ If you get a FILE NOT FOUND error when compiling this program
from a DOS IDE, change to the \BP\EXAMPLES\DOS\TVFM directory
(use File|Change dir).
This will enable the compiler to find all of the units used by
this program.
}
const
{$IFDEF SingleExe}
RezExt = '.EXE';
{$ELSE}
RezExt = '.TVR';
{$ENDIF}
type
TMyApp = object(TApplication)
TrashCan: PTrashCan;
ExitDir: String;
constructor Init;
destructor Done; virtual;
procedure Idle; virtual;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
procedure ToggleVideoMode;
procedure HandleEvent(var Event: TEvent); virtual;
procedure OutOfMemory; virtual;
end;
{ TMyApp implementation }
constructor TMyApp.Init;
var
R: TRect;
H: Word;
CurDir: PathStr;
begin
{ Initialize resource file }
RezStream := New(PProtectedStream, Init(GetExeBaseName + RezExt, stOpenRead, 4096));
if RezStream^.Status <> stOK then
begin
PrintStr('Unable to open resource file.');
Halt(1);
end;
RezFile.Init(RezStream);
{ Standard Turbo Vision objects }
RegisterObjects;
RegisterViews;
RegisterMenus;
RegisterDialogs;
RegisterApp;
RegisterStdDlg;
{ Objects specific to this app }
RegisterGlobals;
RegisterType(RStringList);
RegisterAssociations;
RezStrings := PStringList(RezFile.Get('Strings'));
if RezStrings = nil then
begin
PrintStr('Unable to read resources from resource file.');
Halt(1);
end;
inherited Init;
InitAssociations;
Desktop^.GetExtent(R);
Dec(R.B.Y); Inc(R.A.X);
R.A.Y := R.B.Y - 3;
R.B.X := R.A.X + 5;
TrashCan := New(PTrashCan, Init(R));
Desktop^.Insert(TrashCan);
ConfigRec.Video := ScreenMode and smFont8x8;
ReadConfig;
if ConfigRec.Video <> (ScreenMode and smFont8x8) then
ToggleVideoMode;
{ by defaut, open a directory window to the current drive }
GetDir(0, CurDir);
InsertTreeWindow(CurDir[1]);
end;
destructor TMyApp.Done;
begin
DoneAssociations;
Dispose(TrashCan, Done);
{$I-}
if ExitDir <> '' then
begin
if ExitDir[Length(ExitDir)] = ':' then ExitDir := ExitDir + '\';
ChDir(ExitDir);
end;
{$I+}
inherited Done;
DoneMemory;
end;
procedure TMyApp.Idle;
const
FileListCmds : TCommandSet =
[cmExecute, cmViewAsHex, cmViewAsText, cmViewCustom, cmCopy, cmDelete,
cmRename, cmChangeAttr, cmReverseTags, cmClearTags, cmTagPerCard,
cmAssociate];
var
TopWindow: PWindow;
begin
inherited Idle;
TopWindow := Message(Desktop, evBroadcast, cmTopWindow, nil);
if TopWindow = nil then
begin
DisableCommands(FileListCmds);
DisableCommands([cmExitHere]);
end
else
begin
EnableCommands([cmExitHere]);
if Message(TopWindow, evBroadcast, cmFileListFocused, nil) <> nil then
EnableCommands(FileListCmds)
else
DisableCommands(FileListCmds);
end;
{ This app defines a new type of event, evIdle. This event type is }
{ generated once every idle cycle. }
Message(Desktop, evIdle, 0, nil);
end;
procedure TMyApp.InitMenuBar;
begin
MenuBar := PMenuBar(RezFile.Get('MainMenu'));
end;
procedure TMyApp.InitStatusLine;
var
R: TRect;
begin
StatusLine := PHCStatusLine(RezFile.Get('StatusLine'));
GetExtent(R);
R.A.Y := R.B.Y - 1;
StatusLine^.Locate(R);
end;
procedure TMyApp.ToggleVideoMode;
var
NewMode: Word;
R: TRect;
begin
NewMode := ScreenMode xor smFont8x8;
if NewMode and smFont8x8 <> 0 then ShadowSize.X := 1
else ShadowSize.X := 2;
SetScreenMode(NewMode);
Desktop^.GetExtent(R);
TrashCan^.Reposition(R);
ConfigRec.Video := ScreenMode and smFont8x8;
end;
procedure TMyApp.HandleEvent(var Event: TEvent);
var
NewDrive: Char;
begin
inherited HandleEvent(Event);
if Event.What = evCommand then
begin
case Event.Command of
cmNewWindow:
begin
NewDrive := SelectDrive;
if NewDrive <> ' ' then InsertTreeWindow(NewDrive);
ClearEvent(Event);
end;
cmBeginSearch: BeginSearch;
cmInstallViewer : InstallViewer;
cmDisplayOptions : SetDisplayPrefs;
cmSaveConfig : SaveConfig;
cmTile : Tile;
cmCascade : Cascade;
cmCloseAll: Message(Desktop, evBroadcast, cmCloseAll, nil);
cmDosShell : DosShell;
cmRun : RunDosCommand('');
cmVideoMode: ToggleVideoMode;
cmExitHere:
begin
Message(Desktop, evBroadcast, cmGetCurrentDir, @ExitDir);
EndModal(cmQuit);
ClearEvent(Event);
end;
cmColorChange: SelectNewColors;
end;
end;
end;
procedure TMyApp.OutOfMemory;
begin
MessageBox('There is not enough memory to complete this operation.',
nil, mfError+mfOKButton);
end;
var
MyApp : TMyApp;
begin
MyApp.Init;
MyApp.Run;
MyApp.Done;
end.