
Overview:     Provide method(s) to programmers for displaying
              system information inside of applications.

Version:      1.0.0.1

Programmer:   Kevin S. Gallagher

CopyRights:   See credits

Revisions:    How to detect revisions
              Orignal code format ->  ShowMessage('...');
              Revision code format -> ShowMessage('...') ;
              (actually this is my style now)

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  KSG 02/11/1999
  * Added code to show Windows version/platform (TreeView form only)
  * Added code to show DirectX version          (TreeView form only)
  * Updated project for compiling in D4

  Note: The new features added to the TreeView form are in the other
  form code-wise, just not visually. Don't have time presently to
  tweak the UI.
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Description/Purpose:
  Products like Microsoft Office provide forms within thier
  applications (Word, Excel and Access) methods for display
  various system information. This can be of great help
  when there are problems with one of the applications. This
  is the purpose of the forms and code provided here.

  SysAppInfo description:
  This is a form with a PageControl with several TabSheets. Each
  Tabsheet has either one ListView, while other TabSheets may
  use a ListBox or ComboBox. Many components are dynamically
  created for various reasons. Third party components are also
  dynamically created hence they do not need to be installed before
  using the demo project. There are two buttons on this form, one
  which generates a report for most of the information on the
  TabSheets. Some information was left out simply because there
  are many ways that the information might be formatted, depending
  on how a programmer would like it to be written to the report
  file.

  SysAppInfo usage:
  You could create an AboutBox, put a button on the form labeled
  "SysInfo", and display this form when the user presses the button.
  Another use might be to create a standalone application, and
  use it as a standalone and or call it from within your application.


  TreeForm description:
  This is similar to SysAppInfo, the main difference is that this
  form uses a TreeView along with a single ListView to display
  system information. Presently it lacks report generation and
  shows less system information. I plan to add the missing
  features and add more then whats in SysAppInfo.

  TreeForm usage:
  Same as SysAppInfo



IMPORTANT:
  List below in this file are instructions on how to run the demo
  by either installing or not installing components! Also there
  are several methods to run the project i.e. setting the main
  startup form.



Future enhancements:
  * Database information
  * Registry settings
  * Printer information
  * Modem information
  * Swap File size...
  * What's this help
  * Ability to preview and print reports
  * Polish up how current information is shown


*********************** READ THIS NOW *************************
Installation/Running demo:
  To run the demo(s), you can simply copy all files to a temp
  directory and run the project, or install the components
  and run the demo. If installing then see components in the
  Component sub-directory of this zip file plus files listed
  below.


IMPORTANT:
  Before running pulling the project up in Delphi you need to install
  the components (or simply place them within a directory in the
  Delphi Search path) in the components sub-directory, and also
  download   "TVersionInfoResource" component
  from www.delphifreestuff.com 

  I didn't want to include "TVersionInfoResource" for several reasons
  1) this is the only place this project can be found, 2) Brad is
  constantly updating this work, so this why you get the most up todate
  version.

  The other components (included) are freeware, but you still need to
  read the copyright notices just the same.


Where to find the lastest version:
  www.delphifreestuff.com 

CONFIGURING THE DEMO:
  There are several ways:
  Open the project, then on the IDE menu select
    Project,
    1.  Open the project, then Options followed by
        selecting the "Forms" tabsheet.
    2.  Place one of the one of the "avialable" forms
        into the "Auto Create" list other then the
        form "AboutBox".
    3.  Click the "OK" button
    4.  F9 to run.


Points of interest:
  - ErrMsg function is a wrapper for MessageDlg which takes
    strings to display. If the characters '~' or ';' are found
    in the string they are replaced with #13 which creates
    new lines.

  - FormCreate dynamically creates most of the ListViews. After
    they are created the "Application" TabSheet is brought up.
    This is done since many times I forget to rearrange the
    sheets while coding.

  - The procedure "SysPageControlChange"  controls/organizes
    how/when ListViews are populated. Some ListViews need to
    be repopulated since there information can change any time
    while others most likely won't be a big deal if they did.

  - For those of you who have never used a ListView, there is
    plenty of stuff to pick up on, like searching for items,
    smart methods of adding items. None of it is rocket science
    just not documented well for novice programmers.

  - The procedure "PopulateSysSheet" uses assembler, use at your
    own risk. (I trust it, others may not)

  - "PopulateSysSheet" procedure has several lines commented out.
    This was done so that no scroll-bars were needed.

  - The procedure "PopulateAppSheet" dynamically creates, uses
    Brad Stowers <TVersionInfoResource> component rather then
    dropping it on the form (Works just as well dropped). At the
    time I got lazy and didn't want to grab for it. After it is
    fired up, there is a check to see if there is any data being
    displayed. If not a simple message appears explaing to the
    user there is no info to show. Rather do this then show a
    blank page.

  - Concerning "Processes and Window List" information, the demos
    provided with these components show more info then I do, the
    stuff I left out didn;t seem that important for end-users.
    If and when I create reports this information will be added
    to the reports. No sense in displaying them to users, unless
    you want to add them in?


Credits:
  Grahame S Marsh
  Lots of code used to retrieve various pieces of information.
  I grabbed a project Grahame did for displaying info inside
  of Delphi and used it in this project.

  Peter.Plass
  Author of components for getting Processes and Window list.

  Brad Stower
  Author of TVersionInfoResources component.
  (and many other fine components)

  Robert Vivrette - Prime Time Programming
  - The Disk information code was copied from
    The Unofficial Newsletter of Delphi Users - Issue #20 - March 1997
    1995, 1996, 1997 - Robert Vivrette - Prime Time Programming
    and code by Grahame Marsh - grahame.s.marsh@corp.courtaulds.co.uk
    I simply made it fit to this project.

  Henrik Fabricius
  02/10/99 Code to retrieve register user/company, and Windows version.
  (I would have added it myself, but simply slipped my mind till I saw his code)

  Kevin S. Gallagher (myself)
  The fellow who slapped the various code together. I basiclly
  saved other programmers time and did what they could have
  done, nothing more.


Last but not least:
  Review copyright notices in supplied components for any
  restrictions. They are Freeware.

Questions/Comments
  Kevin S. Gallagher
  gallaghe@teleport.com
  or
  kevin.s.gallagher@state.or.us


