Framework Programmer's Notes
Attempting to understand someone else's code can be difficult. Often the layout of the code
provides no immediate clues on how the program is structured. That's why these notes will
be helpful to a programmer seeking insight into the essential workings of the Framework.
(For an architectural overview please see the attached document.)
The Framework itself consists of a single Delphi application. The project file for this application
is Framework.dpr. This file contains the
program's entry point and includes code generated automatically by Delphi as well as code
manually inserted or edited.
A good way to understand the logic of the Framework is to open it in Delphi and set a breakpoint on the line
immediately following the begin statement in Framework.dpr.
Compile and run the program and when Delphi breaks continue to step through using F7 (trace into) or
F8 (step over.)
The behaviour of the program depends on which mode was selected during start up. The mode
is specified as a command-line parameter and is indicated in the program by a global boolean variable
defined in Globals.pas - ClientMode (/c), ServerMode (/s),
StandardMode, ConversionMode (/v) or POSMode (/p). The default setting when there is no command-line
option is StandardMode.
Both POSMode and ServerMode use a different set of forms and reports from the other modes. When
adding a new form or report it's important to check and if necessary edit the Delphi generated code in
Framework.dpr to ensure that the new object is created
and initialised for the modes that use it.
In StandardMode and ClientMode the application's main form is a TMainForm component (defined in Main.pas)
derived from TBaseForm (defined in Base.Pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
All the main entry screens in the Framework are frame components
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.)
TMainForm contains an array called FrameArray of TBaseFrames which contains
references to all the application's main entry screens. When the user switches from one screen to another the components in FrameArray
are made invisible except for the one that's active which is made visible.
To create a new application (we'll call it NewApp):
1. Create a copy of the Framework source code.
2. Rename Framework.dpr to NewApp.dpr.
3. Rename Framework.cfg to NewApp.cfg.
4. Rename Framework.dof to NewApp.dof.
5. Rename Framework.res to NewApp.res.
6. Edit NewApp.dpr and (a) replace the line
program Framework;
with
program NewApp;
(b) replace the line
Application.Title := 'Framework';
with
Application.Title := 'NewApp';
7. Edit Globals.pas and (a) replace the line
BaseDatabaseName = 'FRAMEWORK';
with
BaseDatabaseName = 'NEWAPP';
(b) replace the line
BaseRegistryKey = 'Software\Responsive Software\Framework';
with
BaseRegistryKey = 'Software\Responsive Software\NewApp';
(c) replace the line
ProgramName = 'Framework';
with
ProgramName = 'NewApp';
8. Open the NewApp.dpr project in Delphi and compile it.
9. Create a new empty folder called Database in the same folder as the executable program NewApp.exe. (NOTE:
This folder can be located elsewhere but the path will need to be specified as an alias called NEWAPP in the BDE Administrator.)
10. Run NewApp.exe.
To create a new data entry screen (we'll call it NewEntry):
1. Create a new frame component TNewEntryFrame derived from TBaseFrame in a new unit NewEntry.pas. (See TEntriesFrame defined in
Entries.pas as an example.)
2. Add the new unit NewEntry.pas to the project.
3. Create a new instance of the TNewEntryFrame component on the application's main form TMainForm (defined in Main.pas.)
4. In Main.pas increment the value of the constant NoOfFramesOnMainForm.
5. Add a new identifying string to the NodeTexts array.
6. Add a new node to the TreeView component (used as a navigation control) and set its Text property to match the
identifying string in NodeTexts.
7. In the procedure TMainForm.FormCreate add a reference to the new frame component to the
appropriate element of FrameArray. (The order of the elements in FrameArray must correspond to the
order of the identifying strings in NodeTexts.)
Accounts.pas
This module contains the implementation of the Accounts screen. It's defined as a frame component TAccountsFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
AccountsCacheUnit.pas
This module contains the implementation of a class TAccountsCache. A single global instance of this class
(called AccountsCache) is declared and initialized in Globals.pas.
This class is used to maintain a list of TAccount's in memory each with a list of
related TEntry's. Its purpose is to speed up access when calculating
and displaying account information.
AccountStatementReportFormat.pas
This module contains the implementation of a procedure FormatAccountStatementReportDetails. This procedure
is called by the PrintAccountStatement procedure in Utilities.pas.
The purpose of this procedure is to format the body of an account statement into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport AccountStatementReport (defined in AccountStatementReportUnit.pas.)
AccountStatementReportUnit.pas
This module contains the implementation of the account statement report. It's defined as a QuickReport component TAccountStatementReport
(derived from the QuickReport TQuickRep component.)
AttachmentCacheManagerUnit.pas
This module contains the implementation of a class TAttachmentCacheManager. A single global instance of this class
(called AttachmentCacheManager) is declared and initialized in Globals.pas.
This class is only used to save and retrieve the contents of a file when it's stored in the database
as part of a TAttachment object. It automatically caches the data on the local computer when the
program is in ClientMode and the workstation Cache Attachments option is switched on.
BalanceSheet.pas
This module contains the implementation of the Balance Sheet screen. It's defined as a frame component TBalanceSheetFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
BalanceSheetReportFormat.pas
This module contains the implementation of a procedure FormatBalanceSheetReportDetails. This procedure
is called by the PrintBalanceSheet procedure in Utilities.pas.
The purpose of this procedure is to format the body of a balance sheet into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport BalanceSheetReport (defined in BalanceSheetReportUnit.pas.)
BalanceSheetReportUnit.pas
This module contains the implementation of the balance sheet report. It's defined as a QuickReport component TBalanceSheetReport
(derived from the QuickReport TQuickRep component.)
Base.pas
This module contains the implementation of the TBaseForm class. This class provides a common ancestor to
all the other forms used in the program and is itself derived from the Delphi VCL TForm component.
BaseFrameUnit.pas
This module contains the implementation of the TBaseFrame class. This class provides a common ancestor to
all the other frames used in the program and is itself derived from the Delphi VCL TFrame component.
BusinessObjects.pas
This module contains the implementation of a number of miscellaneous classes derived from TBusinessObject where
each derived class implements its own version of the virtual methods SaveToStream and LoadFromStream.
Objects of any type descended from TBusinessObject can be added polymorphically to a TBusinessObjectCollection
and the entire collection can be written to or read from a TStream simply by calling the SaveToStream
and LoadFromStream methods of the TBusinessObjectCollection.
The purpose of this module is to contain classes useful in the business logic of the program
that are not saved directly to a database table. If business logic classes are to be saved in a database table
they should be placed in DatabaseObjects.pas
as descendants of TDatabaseObject.
Cashbooks.pas
This module contains the implementation of the Cashbooks screen. It's defined as a frame component TCashbooksFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
CashbooksCacheUnit.pas
This module contains the implementation of a class TCashbooksCache. A single global instance of this class
(called CashbooksCache) is declared and initialized in Globals.pas.
This class is used to maintain a list of TCashbooks's in memory each with a list of
related TCashbookEntry's. Its purpose is to speed up access when calculating
and displaying cashbook information.
CashbookStatementReportFormat.pas
This module contains the implementation of a procedure FormatCashbookStatementReportDetails. This procedure
is called by the PrintCashbookStatement procedure in Utilities.pas.
The purpose of this procedure is to format the body of a cashbook statement into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport CashbookStatementReport (defined in CashbookStatementReportUnit.pas.)
CashbookStatementReportUnit.pas
This module contains the implementation of the cashbook statement report. It's defined as a QuickReport component TCashbookStatementReport
(derived from the QuickReport TQuickRep component.)
ChooseString.pas
This module contains the implementation of a form used to prompt the user with a list of strings contained
in a TStringList. It's defined as a form component TChooseStringForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
ClientCommunicatorUnit.pas
This module contains the implementation of a class TClientCommunicator. A single global instance of this class
(called ClientCommunicator) is declared in Globals.pas and
initialized in the ApplicationStartUp function in Utilities.pas
by a call to CreateClientCommunicator when the application is running in ClientMode.
This class provides the interface between an instance of the application running in ClientMode and an
instance running in ServerMode (using the TServerCommunicator class.)
CommunicationsManager.pas
This module contains a number of procedures used by the application for the purpose of sending and
receiving information about database changes to and from the other running instances of the application.
The procedure ProcessReceivedData is called repeatedly by the application in its OnIdle
event handler TMainForm.OnIdle (in Main.pas)
or TPOSMainForm.OnIdle (in POSMain.pas) to process
data that has been sent from the other instances of the application that are running in StandardMode, ClientMode
or POSMode.
The procedures in this module are used to ensure cached database information is kept
up-to-date even when changes have been made to the database by instances of the application running on other workstations.
CommunicatorUnit.pas
This module contains the implementation of a class TCommunicator. A single global instance of this class
(called Communicator) is declared in Globals.pas and
initialized in the ApplicationStartUp function in Utilities.pas
by a call to CreateCommunicator when the application is running in StandardMode.
This class is used to both send and receive data between instances of the application running in StandardMode.
In a client/server configuration it's replaced (in ClientMode) by TClientCommunicator and (in ServerMode) by
TServerCommunicator.
Compress.pas
This module contains utilities used for LZW data compression.
Config.pas
This module contains the implementation of a form used to prompt the user for workstation and global
configuration settings. It's defined as a form component TConfigForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
Controls.pas
This module is identical to the Borland supplied Delphi VCL module except for a few minor bug fixes.
DatabaseManager.pas
This module contains a number of utility procedures used to retrieve data from and perform updates to the database.
DatabaseObjects.pas
This module contains the implementation of a number of miscellaneous classes derived from TDatabaseObject where
each derived class implements its own version of the virtual methods TableName,
AddNewTableFields, UpdateTable, LoadFromTable, SaveToTable, InsertSQLStrColumnNames,
InsertSQLStrValues, InsertSQLStr, LoadFromStream, SaveToStream, SaveDetailsToDatabase,
DeleteDetailsFromDatabase, LoadDetailsFromStream, SaveDetailsToStream, SetNewEntryValues,
HasReferences, SetupFindStringGrid, FindFormCaption, FindSelectionString,
FindStringGridText, SetupMaintainStringGrid, MaintainFormCaption, MaintainSelectionString,
MaintainStringGridDrawText, MaintainStringGridGetEditText, MaintainStringGridSetEditText,
MaintainStringGridDblClick, ProcessUpdate, ProcessDelete, HeadingString,
ColumnHeadingsString, DetailsString, CSVHeadingsString, CSVDetailsString,
ComboBoxDisplayString and ListBoxDisplayString.
Objects of any type descended from TDatabaseObject can be added polymorphically to a TDatabaseObjectCollection
and the entire collection can be written to or read from a TStream simply by calling the SaveToStream
and LoadFromStream methods of the TDatabaseObjectCollection.
The purpose of this module is to contain classes useful in the business logic of the program
that are saved directly to a database table. If business logic classes are not to be saved in a database table
they should be placed in BusinessObjects.pas
as descendants of TBusinessObject.
Documents.pas
This module contains the implementation of the Documents screen. It's defined as a frame component TDocumentsFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
Entries.pas
This module contains the implementation of the Entries screen. It's defined as a frame component TEntriesFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
Framework.dpr
This module is the project file for the application and contains the program entry point.
FTP.pas
This module contains the implementation of a form that's never displayed on the computer screen. It's only
used to contain a TNMFTP object that's used for sending a file via the FTP protocol. It's defined as a form component TFTPForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
GeneralUtilities.pas
This module contains general utility procedures that don't depend on other modules in the application.
This includes string formatting and file handling functions.
The purpose of this module is to contain procedures and functions that are of a general nature and could potentially be useful
in other applications.
Utilities specific to the application or that don't belong in this module for any reason should be placed in
Utilities.pas
Globals.pas
This module contains all global constants and variables.
Graph.pas
This module contains the implementation of the Graph screen. It's defined as a frame component TGraphFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
GraphReportUnit.pas
This module contains the implementation of the graph report. It's defined as a QuickReport component TGraphReport
(derived from the QuickReport TQuickRep component.)
HTTPResponder.pas
This module contains the implementation of a function GetHTTPResponse. This function
is called by the THTTPConnectionThread.ClientExecute procedure in
HTTPServerCommunicatorUnit.pas.
The purpose of this function is to format the response to an HTTP request.
HTTPServerCommunicatorUnit.pas
This module contains the implementation of a class THTTPServerCommunicator. A single global instance of this class
(called HTTPServerCommunicator) is declared in Globals.pas and
initialized in the ApplicationStartUp function in Utilities.pas
by a call to CreateHTTPServerCommunicator when the application is running in ServerMode and /h was specified on the command-line.
This class is used by an instance of the application running in ServerMode to respond to HTTP requests.
HTTPUtilities.pas
This module contains miscellaneous utility procedures used by the GetHTTPResponse function in
HTTPResponder.pas
when responding to HTTP requests.
IBSQL.pas
This module is identical to the Borland supplied Delphi VCL module except for a few minor bug fixes.
IncomeStatement.pas
This module contains the implementation of the Income Statement screen. It's defined as a frame component TIncomeStatementFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
IncomeStatementReportFormat.pas
This module contains the implementation of a procedure FormatIncomeStatementReportDetails. This procedure
is called by the PrintIncomeStatement procedure in Utilities.pas.
The purpose of this procedure is to format the body of an income statement into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport IncomeStatementReport (defined in IncomeStatementReportUnit.pas.)
IncomeStatementReportUnit.pas
This module contains the implementation of the income statement report. It's defined as a QuickReport component TIncomeStatementReport
(derived from the QuickReport TQuickRep component.)
Items.pas
This module contains the implementation of the Items screen. It's defined as a frame component TItemsFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
Ledger.pas
This module contains the implementation of the Ledger screen. It's defined as a frame component TLedgerFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
The only component on TLedgerFrame is a TImage. This is the picture that appears when the user
clicks on Ledger in the navigation control.
Main.pas
This module contains the implementation of the main form when the application is running in StandardMode
or ClientMode. It's defined as a form component TMainForm derived from TBaseForm (defined
in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
TMainForm contains all the frame components and menu items as well as the TreeView component
used as a navigation control. It also contains all the logic that responds to key strokes, mouse clicks
and selection of menu items on the main form.
POS.pas
This module contains the implementation of the POS screen. It's defined as a frame component TPOSFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
The only component on TPOSFrame is a TImage. This is the picture that appears when the user
clicks on POS in the navigation control.
POSConfig.pas
This module contains the implementation of a form used to prompt the user for POS
configuration settings. It's defined as a form component TPOSConfigForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
TPOSConfigForm is only accessible by the user when the application is running in POSMode.
POSMain.pas
This module contains the implementation of the main form when the application is running in POSMode. It's defined as
a form component TPOSMainForm derived from TBaseForm (defined
in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
Progress.pas
This module contains the implementation of a form used to display a progress bar and at the same time
check if the <Escape> key was pressed. It's defined as a form component TProgressForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptAccountType.pas
This module contains the implementation of a form used to prompt the user for an account type - Asset,
Liability, Equity, Income or Expense. It's defined as a form component TPromptAccountTypeForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptDate.pas
This module contains the implementation of a form used to prompt the user for a date. It's defined as a form
component TPromptDateForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptHostNameUserIdPassword.pas
This module contains the implementation of a form used to prompt the user for a host name, user ID and password. It's defined as a form
component TPromptHostNameUserIdPasswordForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptPaymentType.pas
This module contains the implementation of a form used to prompt the user for a payment type. It's defined as a form
component TPromptPaymentTypeForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
TPromptPaymentTypeForm is only accessible by the user when the application is running in POSMode.
PromptSearchString.pas
This module contains the implementation of a form used to prompt the user for customer search criteria - last name,
first name, address and phone number. It's defined as a form
component TPromptSearchStringForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
TPromptSearchStringForm is not currently used within the Framework application.
PromptString.pas
This module contains the implementation of a form used to prompt the user for a string of text. It's defined as a form
component TPromptStringForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptUserIdPassword.pas
This module contains the implementation of a form used to prompt the user for a user ID and password. It's defined as a form
component TPromptUserIdPasswordForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
PromptUserNamePassword.pas
This module contains the implementation of a form used to prompt the user for a user name and password. It's defined as a form
component TPromptUserNamePasswordForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
ProxyDatabaseCollectionObjectFind.pas
This module contains the implementation of a form used to prompt the user to select a TDatabaseObject
from a TProxyDatabaseObjectCollection. It's defined as a form component TProxyDatabaseCollectionObjectFindForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
ProxyDatabaseCollectionObjectMaintain.pas
This module contains the implementation of a form used to allow the user to edit a collection of TDatabaseObject's
in a TProxyDatabaseObjectCollection. It's defined as a form component TProxyDatabaseCollectionObjectFindForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
ProxyDatabaseObjectCollectionUnit.pas
This module contains the implementation of a class TProxyDatabaseObjectCollection.
This class is used to provide access to a collection of TDatabaseObject's without requiring them
to be loaded into memory until they are needed. An instance can be constructed either by suppying an SQL
selection string or by reference to an existing TDatabaseObjectCollection.
ProxyObjectListingReportUnit.pas
This module contains the implementation of a report used to list a collection of TDatabaseObject's
in a TProxyDatabaseObjectCollection. It's defined as a QuickReport component TProxyObjectListingReport
(derived from the QuickReport TQuickRep component.)
ReceiptReportFormat.pas
This module contains the implementation of a procedure FormatReceiptReportDetails. This procedure
is called by the PrintReceipt procedure in Utilities.pas.
The purpose of this procedure is to format the body of a receipt into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport ReceiptReport (defined in ReceiptReportUnit.pas.)
ReceiptReportUnit.pas
This module contains the implementation of the receipt report. It's defined as a QuickReport component TReceiptReport
(derived from the QuickReport TQuickRep component.)
Register.pas
This module contains the implementation of a form used to prompt the user for a registration
code. It's defined as a form component TRegisterForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
RegistrationInfo.pas
This module contains the implementation of a form used to display registration
information to the user. It's defined as a form component TRegistrationInfoForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
Reports.pas
This module contains the implementation of the Reports screen. It's defined as a frame component TReportsFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
The only component on TReportsFrame is a TImage. This is the picture that appears when the user
clicks on Reports in the navigation control.
Sales.pas
This module contains the implementation of the Sales screen. It's defined as a frame component TSalesFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
SalesManagerUnit.pas
This module contains the implementation of a class TSalesManager. A single global instance of this class
(called SalesManager) is declared and initialized in Globals.pas.
This class is used by the application when running in POSMode to save each TSale to a temporary file
before moving it to the database. This allows the application to continue working
in POSMode even when it's unable to connect to the database via the server.
The procedure TSalesManager.PostSales is called repeatedly by the application's OnIdle
event handler TPOSMainForm.OnIdle (in POSMain.pas) to
move TSale's from the temporary file to the database.
SalesReportFormat.pas
This module contains the implementation of a procedure FormatSalesReportDetails. This procedure
is called by the PrintSalesReport procedure in Utilities.pas.
The purpose of this procedure is to format the body of a sales report into a TReportData (defined in GeneralUtilities.pas) object
before it's displayed by the QuickReport SalesReport (defined in SalesReportUnit.pas.)
SalesReportFrameUnit.pas
This module contains the implementation of the Sales Report screen. It's defined as a frame component TSalesReportFrame
derived from TBaseFrame (defined in BaseFrameUnit.pas.) (TBaseFrame is derived from
the Delphi VCL TFrame component.) An instance of this component appears on the application's main form TMainForm (defined in Main.pas.)
SalesReportUnit.pas
This module contains the implementation of the sales report. It's defined as a QuickReport component TSalesReport
(derived from the QuickReport TQuickRep component.)
ServerCommunicatorUnit.pas
This module contains the implementation of a class TServerCommunicator. A single global instance of this class
(called ServerCommunicator) is declared in Globals.pas and
initialized in the ApplicationStartUp function in Utilities.pas
by a call to CreateServerCommunicator when the application is running in ServerMode.
This class is used by an instance of the application running in ServerMode to accept and service multiple
connections from instances of the application running in ClientMode (using the TClientCommunicator class.)
ServerMain.pas
This module contains the implementation of the main form when the application is running in ServerMode. It's defined as
a form component TServerMainForm derived from TBaseForm (defined
in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
ServerTest.pas
This module contains code used to test that the server can handle requests from multiple clients simultaneously
by simulating the client connections.
Splash.pas
This module contains the implementation of a form that's displayed to the user during start up. It's defined as a form component TSplashForm
derived from TBaseForm (defined in Base.pas.) (TBaseForm is derived from
the Delphi VCL TForm component.)
Utilities.pas
This module contains miscellaneous utility procedures that have dependencies on other modules in the application.
The purpose of this module is to contain procedures and functions that don't belong to any of the other modules.
This includes all general business processing routines and other utilities that are an integral part of
the application and would not be useful if they were placed in another application.
General utilities (e.g. string formatting or file handling) that might be useful in another application should be placed in
GeneralUtilities.pas.