TRunOnce Component
******************
The TRunOnce component allows a program to determine if a previous 
instance of the program is already running and to possibly quit if
a previous instance is determined to be running.  TRunOnce determines
if a previous instance is running by allocating some named shared 
memory.  The name of the memory allocated is the name of the EXE
running with all '.' replaced by 'x' (for instance: TEST.EXE would
equal \SHAREMEM\TEXTxEXE).  Subsequent runs while the original is
still running return a valid value from checking the named memory.
The original program stores window handle of its main form in the
shared memory location so the subsequent programs can refocus the 
window.
Due to where window handles are allocated and available, the 
component does not automatically halt the current instance if a 
previous instance is running.

To install:
-----------
Unzip the component source in your component source directory (my
directory is "drv:\sibyl\Components\...".  Compile the source, then move
the 'RunOnce.SPU' to the Sibyl COMPNT directory.
In Sibyl, choose 'Component', then 'install'.  Go to the COMPNT directory 
and select 'RunOnce.SPU'.  Select the TRunOnce component and click OK.
The TRunOnce component/dialog will appear in a tab labeled 'Custom'.  To
change the component location, edit the EXPORTS line in the source.

TRunOnce Methods:
-----------------
CheckOnly - Procedure called in the main forms 'OnShow' event to check if 
            it is the only copy of the program running.  This routine does 
            not have to be called if only the knowledge is wanted that the 
            program has a previous instance running.

TRunOnce Properties:
--------------------
FirstInst - Read only, BOOLEAN.  Property returns TRUE for first instance
            of program, FALSE for subsequent while first is running. 
            Property is not available during the design stage.

UseNotifyMsg - R/W, BOOLEAN.  Property determines if the 'CheckOnly' method
               displays a dialog with a message to the effect that another
               copy of the program is running.  Default is FALSE and the
               property is available during design.

NotifyMsg - R/W, STRING.  Property contains the message displayed if the
            UseNotifyMsg property is set to TRUE.  The default message is:
            'Application already running!' and the property is available
            during design.

Version - Read only (not stored) STRING.  Property is available during 
          design.  Property returns the current version of the TRunOnce 
          component.

To use:
-------
Drop TRunOnce on form during design stage.  Call the CheckOnly method from the
main forms 'OnShow' event.  Note, a message dialog is displayed if the RunOnce
property 'UseNotifyMsg' is set to TRUE.

For example-

 Procedure TForm1.OnShow(Sender: TObject);
 Begin
   IF RunOnce1.FirstInst
    THEN Caption := Caption + ' - Original';
   RunOnce1.CheckOnly; {keep other instances from running}
 End;

Any comments, suggestions, bug fixes, feel free to contact me.

- Michael G. Slack (slack@ibm.net), 1998/02/21
