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.