---------
TdkwGraph
---------

  The graph provides a very flexible mechanism for
  dealing with an unlimited number of layers and axes.
  Currently not available as a component, it is fairly
  easy to code for, keeping in mind:

  - Error handling is minimal ... undefined results
    may occur if you violate assumptions in building
    your graph.  It should, however, be 'user proof'

  - Redisplay is NOT automatic.  After making changes
    to a graph, call Refresh or Restructure to display
    the graph.

  property FixedWidth: Integer

    The graph normally adjusts to any height or width,
    but when FixedWidth is not zero, a horizontal scroll
    bar allows a graph wider than the assigned area to
    be contained.  The value is measured in pixels, and
    defaults to zero.

  procedure AddAxis (
      Name: String ;
      Axis: TdkwGraphAxis ) ;

    Each horizontal and vertical axis used in the graph
    MUST be added by calling AddAxis.  The name assigned
    will be used in labelling the axis.
    
  procedure AddLayer (
      Name: String ;
      Layer: TdkwGraphLayer ) ;

    Only layers added to the graph using AddLayer will
    be displayed when the graph is drawn.  The name is
    currently not used.
     
  procedure RemoveLayer ( Layer: TdkwGraphLayer ) ;

    Layers removed will not be displayed when the graph
    is next drawn.

  procedure Restructure ;

    After adjusting the graph, restructure should be
    called.  It will be implicity called prior to
    redisplaying the graph when layers are removed or
    added, but must be called manually if layer data
    is changed in order to rescale axes.

  event OnClick

    This is a hack ... it reports mouse clicks on the
    graph, but only using the coordinate system of the
    first horizontal axis (bleah!)  The event handler
    must be of the form:

      procedure Class.Name (
          Sender: TObject ;
          Index: Integer ) ;

--------------
TdkwGraphLayer
--------------

  property Color: TColor

    Used to determine the primary graph drawing color

  property Visible: Boolean

    Layers which are not visible will not be drawn and
    will not be used to automatically determine axis
    scaling.  All layers default to visible.

  property XAxis: TdkwHorizontalGraphAxis
  property YAxis: TdkwVerticalGraphAxis

    These two values MUST be set for each layer and
    control the display of the graph layer

  event OnColor

    All existing graph layer types will call this
    event, if assigned, to control the color of
    individual graph segments. The handler must be
    of the form:

      procedure Class.Name (
          Sender: TObject ;
          Index: Integer ;
          var Color: TColor ) ;
          
-------------------
TdkwHiLowGraphLayer
-------------------

  Inherits from TdkwGraphLayer

  property DataHigh: TdkwIntegerArray
  property DataLow: TdkwIntegerArray

    Each acts as a zero-based array of integers,
    simply refer to Layer.DataLow [ index ] or
    Layer.DataHigh [ index ] to set or read values.

-----------------
TdkwBarGraphLayer
-----------------

  Inherits from TdkwGraphLayer

  property Data: TdkwIntegerArray

    Acts as a zero-based array of integers, simply
    refer to Layer.Data [ index ] to set or read
    values.

------------------
TdkwLineGraphLayer
------------------

  Inherits from TdkwGraphLayer

  property Data: TdkwIntegerArray

    Acts as a zero-based array of integers, simply
    refer to Layer.Data [ index ] to set or read
    values.

-------------
TdkwGraphAxis
-------------

  property Color: TColor

    The 'color' property is used to determine the color
    used to draw the axis and the axis labels.  The
    color defaults to clBlack.

  property Visible: Boolean

    Axes which are not visible can still be assigned
    to layers, they simply will not appear on the graph.
    All axes default to visible.

-----------------------
TdkwHorizontalGraphAxis
-----------------------

  Inherits from TdkwGraphAxis

  property Minimum: Integer
  property Maximum: Integer

    These represent the range of index values used to draw
    graph layers associated with this horizontal axis.  Each
    of these graph layers MUST contain data points for the full
    range of index values.  It's probably best to leave minimum
    at zero.

  property MajorTick: Integer
  property MinorTick: Integer

    Used to control the drawing of the horizontal axis, minor
    ticks are drawn once every MinorTick index values, larger
    ticks are drawn once every MajorTick index values.  Index
    labels will only be placed at major ticks.

  event OnLabel

    Horizontal labels are integer index values by default,
    overridden only by providing a event handler here of the
    form:

      procedure Class.Name (
          Sender: TObject ;
          Index: Integer ;
          var AxisLabel: String ) ;

---------------------
TdkwVerticalGraphAxis
---------------------

  Inherits from TdkwGraphAxis

  The vertical axis is alsmost completely automatic,
  labelling, maximum, minimum et al are internally
  determined
