- Documentation Guide
          
        
- General Information
          
        
- Getting Started
          
        
- Trouble Shooting
          
        
- Intermediate Level Graphs
          
        
- Advanced Level Graphs
          
        
- Some How To's
          
        
- Programmers Corner (For those who want to do something a bit out the
          ordinary)
          
        
- Version History
 
    Introduction
    
      For a long time now we have been wanting a tool which easily allows us to
      draw graphs in our Clarion programs. Our ideal tool should have both a
      strong drawing engine and a template for linking the graph to the data in
      the dictionary. Up to now, however, none of the tools provided were
      sufficiently capable on the template side of making adding a graph to our
      applications simple.
      
      This is a pity, because a graph is an incredibly powerful way of managing
      large clumps of data. Many browse windows can be enhanced with a simple
      graph, and it's much easier to spot trends and anomalies on a graph than
      on a plain browse screen or report.
      
      Late in 1999 a Clarion programmer (we'll call him "The programmer formerly
      known as Mike") showed us a really nice engine written entirely in
      Clarion. We encouraged him to complete the job by writing the necessary
      template. He asked us to do it, and of course we can't resist a challenge.
      After rather more work than we expected, the template is now here.
      Actually, we quite like it - it contains some features never before
      implemented in a Clarion Template, including a 
Dynamic
        User Interface (i.e. the template makes fewer options available
      to a beginner than to an advanced user).
      
      We think you'll find that the power of this template truly does make
      adding graphs to your applications simple, with no hand-coding required.
      Rather than listing all the features here, though, we refer you to the
      section entitled 
Features. 
      
      Because we've broken new ground in the way some aspects of the template
      work, we've also had a large number of bug reports where the "bug" is
      actually a feature. So, before you report a bug, please read 
One
        Man's Bug is Another Man's feature.
      
      
BETA Notes: For a list of features added
      during the beta program, see the 
Version
        History. As a beta user you will be entitled to free upgrades for
      Insight Graphing 1 for the duration of the beta program, and also the Gold
      release. 
Upgrading from Beta 6
    
      Every effort has been made to make sure that upgrading from beta
      6 to beta 7 (or later) goes as smoothly as possible. There are however
      some
      cases where your manual intervention is required. If you have been
      referred
      here by the generated code then check the Reference Number next to each
      point
      to see which item applies to you.
      
        
          
            | Reference 1 | Reports: Up to beta 6 the "control"
              used on the report has been the 'box' control. This allows you to
              put a border around your graph. From beta 7 onwards there also
              needs to be an image control. Your options are: 
 a) remove the Insight Graph and repopulate it (a lot of work) OR
 
 b) make the following manual change to the report format:
 
 
                Go to the Report Procedure in the application tree, and
                  bring up the text version of the
                  report structure by clicking on the ellipsis button next to
                  the report button.
 
  
 
Find your graph control. It will be a BOX control, and the
                  #ORIG setting should be #ORIG(?Insight). Just after this line
                  add another line to create an IMAGE control. Note that the SEQ setting should be set the same, and
                  the AT of the control should be set
                  the same. The Image control will need a unique USE
                  equate. By convention just tack the word Draw onto the Box's
                  equate. Example :
 
  
 Note : This change will have no
              affect on your ability to go back to Insight Beta 6 if necessary.
              i.e. the image control will remain, but the old version of Insight
              will simply ignore it.
 | 
        
      
    Support
     Your questions, comments and suggestions are welcome.
      
      
        
          
            | CapeSoft Support | 
          
            | Email |   | 
          
            | Telephone | +27 87 828 0123 | 
          
            | Fax | +27 21 715 2535 | 
          
            | Post | PO Box 511, Plumstead, 7801, Cape Town, South Africa | 
        
      
      
      Insight Graphing 1 is no longer available for purchase, however you can
      purchase the either the upgrade or the full version to Insight Graphing 2
      from:
      
        
          
            | CapeSoft Sales | 
          
            | Web | www.capesoft.com | 
          
            | Email |  | 
          
            | Telephone | +27 87 828 0123 | 
          
            | Fax | +27 21 715 2535 | 
          
            | Post | PO Box 511, Plumstead, 7801, Cape Town, South Africa | 
        
      
      
      
    License & Copyright
    
      This template is copyright © 2000-2013 by CapeSoft Software and Mike
      Berkeley. None of the included files may be distributed, except for DLL
      files which are required by your application. Your programs which use
      Insight can be distributed without any Insight royalties.
      
      Each developer needs his own license to use Insight Graphing.
      
      This product is provided as-is. Use it entirely at your own risk. Use of
      this product implies your acceptance of this, along with the recognition
      of copyright stated above. In no way will CapeSoft Software, their
      employees or affiliates be liable in any way for any damages or business
      losses you may incur as a direct or indirect result of using this product.
      
      
Distribution
      
        If you are compiling your application in 
Stand-Alone mode
        (which means that you 
are shipping the
        Clarion runtime DLL's), you will need to ship the Insight DLLs as well
        as your EXE (and other Clarion DLL's). The exact names of the files to
        ship depends on your version of Clarion:
        
        
          
            
              | DLLs required | 
            
              | Clarion Version | DLL required | 
            
              | Clarion 5 | C5IGX.DLL, LIBPNG.DLL and ZLIB.DLL | 
            
              | Clarion 5.5 | C55IGX.DLL, LIBPNG.DLL and ZLIB.DLL | 
            
              | Clarion 6 | C60IGX.DLL, LIBPNG.DLL and ZLIB.DLL | 
          
        
        
        If you are compiling in 
Local mode (which means you end up with
        one all-inclusive exe), then you only need to ship the LIBPNG.DLL and
        ZLIB.DLL files.
      
Installation
      
        1. Run the supplied installation file. 
      Features
      
        Graphing Engine
        
          - Support for Bar, Pareto, Line, Gantt, Time, Donut, Hi-Lo, Candle
            and Pie Charts 
- Full control over the look and feel of the graph, and the data
- 20 built-in Axis styles, 12 built-in Data Styles
- Automatic Y-Axis Scaling
- Multiple Y-Axis Labelling
- Supports Data-Point Labelling
Template
        
          - Dynamic Interface, exposes more options as you learn.
- Directly interfaces to the tables in your Dictionary
- Supports the Graphing of Fields or Expressions
- Supports the Counting, Summing, and Averaging of records
- Supports dynamic labelling based on the data in your tables
- Uses Views for efficient access to the
            data, regardless of the File Driver
- Supports plotting data from Queues and
            Memory Variables as well
- Supports Multiple Views per graph, and Multiple Fields per View
- Supports dynamic (changing) numbers of data sets
- Supports drilling down from one graph to another based on the
            point clicked on in the first graph 
Graphing on Windows
        
          - Allows Graphs on all Windows including Browses, Forms etc.
- Allows multiple graphs on the same window
- Allows for Mouse-Over information
- Allows for a Right-Click menu including options like Zoom In, Zoom
            Out, Print, Save As, Drill Down, Back Up, Select Graph Type and so
            on.
- Allows for a default Left-Click action to be set
Graphing on Reports
        
          - Allows automatic placement of Graphs at the beginning or end of
            the report
- Allows placement of graphs during the report, based on your
            criteria
- Allows graphs to be added to existing reports
- Allows graphs to be placed next to or above each other
- Allows multiple graphs on one detail
General
        
          - No Hand-Coding required
- Allows you to set the "look" of your graphs from one global
            extension, but also allows you to override the look for every
            individual graph
- Supports Clarion 5, 5.5 and 6
- Supports Legacy and ABC templates
- Supports EXE and DLL apps
- Supports 32 bit (not 16 bit) programs
 
      One Man's Bug is another Man's Feature 
      
        - Look Up Fields: All bug reports are
          welcome at   However there is one "bug" which has
          been reported numerous times, but which is in fact a feature. However,
          because Insight behaves differently to what you might expect, it can
          appear to be a bug at first glance. This bug centers around the use of
          the ... button to look up fields. When you
          click on this and select a field, you probably expect the old contents
          of the entry to be cleared and the selected field to be put in its
          place. With Insight this doesn't happen. This is because Insight
          allows you to build expressions into almost all these fields. For
          example, say you wanted to sum all the sales for a particular month.
          Your key, on the Invoice file, is naturally by Date. But you want to
          sum on the Month, not the Date, so the Parent field would be set to Month(Inv:Date). By the way: If you
          reported this bug and were directed to read this bit of the docs,
          don't feel bad. You're not alone <grin>. However there is one "bug" which has
          been reported numerous times, but which is in fact a feature. However,
          because Insight behaves differently to what you might expect, it can
          appear to be a bug at first glance. This bug centers around the use of
          the ... button to look up fields. When you
          click on this and select a field, you probably expect the old contents
          of the entry to be cleared and the selected field to be put in its
          place. With Insight this doesn't happen. This is because Insight
          allows you to build expressions into almost all these fields. For
          example, say you wanted to sum all the sales for a particular month.
          Your key, on the Invoice file, is naturally by Date. But you want to
          sum on the Month, not the Date, so the Parent field would be set to Month(Inv:Date). By the way: If you
          reported this bug and were directed to read this bit of the docs,
          don't feel bad. You're not alone <grin>.
        -  Legends: Another often-reported bug is
          simply something we don't support. When making legends you have 3
          choices to make:
        - Legend position ( where it is in relation to the graph)
- Legend type (Stacked or Inline)
- Font Angle (0 or 90 degrees)
      There are two combinations of the above that we don't support, because
      they simply are not useful. If either of these two combinations
      is set, the legend is will not be displayed. They are:
      
        - Position Left or Right (4 or 6), Inline = 1 and Font Angle = 0
- Position Top or Bottom (8 or 2), Inline = 1 and Font Angle = 90
      Both of these legend combinations would essentially leave no space for the
      graph itself.
      
      Tip: A good place to experiment with the legend properties
      is in the 
included school example. Click on the
      Grand Tour button on the toolbar and keep clicking next until you reach
      the legends example.
    
A Bit of Background
    
      Like all things, it helps to understand a little bit of the terminology
      used in the template before you get going. Probably the best way to start
      is with a diagram:
      
       
      
      
        - Graph Heading: The heading of the graph.
          In this case, "Sales for the Year".
- X-Axis Name: The name of the x-axis. In
          this case, "Quarter". 
- Y-Axis Name: The Name of the y-axis. In
          this case, "Sales".
- Y-Axis Values: These are the values next
          to the y-axis. In this case they are 0, 27, 55, 82, 109.
- Data Points: Each bar on the chart above
          is a (data-) point. In general, "data points" refers to the actual
          points plotted on the graph. 
- Set: A set is a collection of data
          points. In the above graph, there are two sets, each drawn in a
          different color. So, in this example, the first set consists of all
          the data points drawn in gray, and the second consists of all the data
          points drawn in blue. 
- Legend: The legend appears to the right of
          this graph. It lists the color of each set next to its description. 
- Point Numbers: These are the x-axis
          values. One can also see the point numbers as the x-coordinates of the
          data points. Usually, what appears as labels beneath the x-axis are
          not the point numbers, but the point names (note that it is possible
          to use the former as labels), since these are usually more
          informative. See below. 
- Point Names: The point names usually
          appear below the x-axis. A point name is a (very) short description
          for a point number. In this case the point names are "1st Quarter",
          "2nd Quarter", "3rd Quarter" and "4th Quarter".
      As you work through the various template options you'll see these words,
      especially Data Points, Sets and Point Names, a lot. Feel free to refer to
      the above diagram until you are comfortable with the terms.
    
Jump Start
    
      In this section we give a step-by-step example that will guide you through
      creating your first application containing an Insight Graph.
      
      Code Example: There is a copy of the source
      code of this example in your 
Clarion?/3rdParty/Examples/Insight/JumpStart
      folder.
      
      
What we are doing: Our aim is to create a
      simple window containing a graph control that will refresh every time new
      data is loaded. Our end-result will look something like this:
      
      
 (1)
      
      (1) Open Clarion 5, and create a new
      application. Add the Active Insight Functions Global Extension. In the 
Template Level dropdown
      list, choose Advanced. Click OK. 
      
      
(2) For the main procedure, create a generic
      window and add a close button. Add to the local data of this procedure the
      following fields (leave the window formatter, right-click on the Main
      procedure, choose Data, click Insert):
      
      
plottingQueue    queue
      
      setNumber
        long
      setName            string(128)
      pointNumber                 long
      pointName          string(
128)
      value
        real
                       end 
      Give the above queue the prefix "
pq".
      
      
(3) Go to the window, go to Populate Control
      Template and add an Insight_Graph Control Template to your window. Resize
      the region it creates to fit the window, and then right-click on the
      region and choose Actions. Enter your Graph Heading on the 
Graph
        tab ('
Sales for the Year' - 
Tip:
        Note that for Insight Graphing, every 
string
      that is not a variable must be included in 
single
        quotes).
      
      
(4) Now choose the 
Data
        Tab and click on Insert. On the 
Primary
        Source Tab of the window that pops up, select Queue from the Data
      From dropdown list. Select plottingQueue from the Local Data for the Queue
      Name. Now choose the 
Sets
        Tab and click on Insert. On the 
Set
        Tab of the new window that pops up, enter 
pq:setName
      as the Set Description. For High Field, choose 
pq:value.
      Now go to the 
Advanced
        Tab of this window, check Override Setnumber and select 
pq:setNumber
      for the value. Click OK and OK again.
      
      
(5) Now go to the 
X-Axis
        Tab and enter the X-axis Name ('
Quarter').
      Uncheck Automatically Generate. For Point Name, enter 
pq:pointName,
      and for Point Number select 
pq:pointNumber.
      
      
(6) Next, go to the 
Y-Axis
        Tab and enter a name for the Y-axis ('
Sales').
      
      
(7) Now click on the 
Legend
        Tab and check Override Global Settings, check Display Legend and
      choose Right in the Position group.
      
      
(8) Go to the ThisWindow.Init Procedure embed,
      just after GlobalErrors.SetProcedureName('Main'), and paste the following
      code:
      
        
 PlottingQueue.setNumber = 1
          PlottingQueue.setName = '
Sales'
          PlottingQueue.pointNumber = 1
          PlottingQueue.pointName = '1st Quarter'
          PlottingQueue.value = random(1,100)
          add(
PlottingQueue)
        
          PlottingQueue.setNumber = 1
          PlottingQueue.setName = 'Sales'
          PlottingQueue.pointNumber = 2
          PlottingQueue.pointName = '2nd Quarter'
          PlottingQueue.value = random(1,100)
          add(
PlottingQueue)
        
          PlottingQueue.setNumber = 1
          PlottingQueue.setName = 'Sales'
          PlottingQueue.pointNumber = 3
          PlottingQueue.pointName = '3rd Quarter'
          PlottingQueue.value = random(1,100)
      add(
PlottingQueue)
        
          PlottingQueue.setNumber = 1
          PlottingQueue.setName = 'Sales'
          PlottingQueue.pointNumber = 4
          PlottingQueue.pointName = '4th Quarter'
          PlottingQueue.value = random(1,100)
      add(
PlottingQueue)
        
          PlottingQueue.setNumber = 2
          PlottingQueue.setName = 'Refunds'
          PlottingQueue.pointNumber = 1
          PlottingQueue.pointName = '1st Quarter'
          PlottingQueue.value = random(1,10)
      add(
PlottingQueue)
        
          PlottingQueue.setNumber = 2
          PlottingQueue.setName = 'Refunds'
          PlottingQueue.pointNumber = 2
          PlottingQueue.pointName = '2nd Quarter'
          PlottingQueue.value = random(1,10)
      add(
PlottingQueue)
        
          PlottingQueue.setNumber = 2
          PlottingQueue.setName = 'Refunds'
          PlottingQueue.pointNumber = 3
          PlottingQueue.pointName = '3rd Quarter'
          PlottingQueue.value = random(1,10)
      add(
PlottingQueue)
        
          PlottingQueue.setNumber = 2
          PlottingQueue.setName = 'Refunds'
          PlottingQueue.pointNumber = 4
          PlottingQueue.pointName = '4th Quarter'
          PlottingQueue.value = random(1,10)
      add(
PlottingQueue)
      
      (9) Now add a button called ?NewGraph to the
      window, and in the EVENT:Accepted embed, paste the above code again, but
      preceded by 
      
      
free(
PlottingQueue) 
      
      and succeeded by
      
      
ThisGraph1.Reset()     
          ThisGraph1.Draw()   
      
      
      
      (12) If you are using 
Clarion
        5, go to Project Properties and click on the Defines Tab. Enter 
          _IGDLL_=>0
      
      
(11) Compile and Run the application.
      
      When the application launches, click on the New Graph button and see the
      Insight magic at work. A new graph will be drawn every time, depending on
      the random numbers generated by the above code.
      
      
Tips:
      
        - The values in pq:pointName are used
          to label each new point on the x-axis.
-  pq:value is the value on the
          y-axis, and pq:pointnumber is the
          value on the x-axis.
        
          - The value of pq:setnumber
            indicates to which dataset the value in pq:value
            belongs to. Each data set is drawn in a different color on the
            graph.
 
      
        - The values in pq:setName are used
          for the names in the legend - they are the names of the different
          datasets.
- Checking Override Set Number, as we did above, allows one to draw
          multiple datasets on the same graph without having to add each set
          individually on the Sets
            Tab (choosing the latter route means adding a filter on the Set
          Tab of the Set Window for each set to filter out all points in the
          queue not belonging to that set). 
- The fonts of the legend and headings can be changed by going to the
          Fonts Tab.
Pie Graphs 
      Pie Graphs are a little different than the rest of the graphs. There will
      only be one set, and each slice in the pie is seen as a point on the
      X-Axis. So, supposing you had a queue where each record in the queue is a
      new slice, you would have to take the following steps (see the 
JumpStart
      above r.e. more specifics on how to get to the mentioned windows and
      tabs):
      
        - Add your queue as a data source on the Data Tab.
- For your data source, add one Set. Go to the Set Tab on the Set
          Window. There is no need to give it a description. 
- In the "Field" entry for the set, enter the field containing the
          value to plot. You can now close the Set Window. 
- If you have fields in the queue containing the slice numbers and/or
          names, you should go to the X-Axis Tab and enter them in the point
          name and number fields (untick Automatically Generate). 
- On the Data Tab you can set what information should be displayed for
          each slice. On the Legend Tab you can do something similar, but the
          information will be shown next to the graph as opposed to in labels
          for the slices. 
      To make Insight use different colors for the slices other than the
      defaults, we need to override the colors for the points, not the sets.
      Lets suppose you had a field in your queue that specified the color for
      that point/slice. We need to take the following steps:
      
        - Go to the one set you created for the pie, and go to its Colors
            Tab.
- Click Insert for the "Conditional Point Overrides" listbox.
- Enter "true" for the condition.
- Tick "Use Variables for Colors". 
- Enter the queue field containing the slice color in the provided
          fields.
Graph Gallery
    
     Adding Insight to your Application
    
      Adding Insight to your Application is easy. 
      
        - Open your application and click on the Global Button.
- Click on Extensions, and add the Activate Insight Global Extension.
- You don't have to set any of the values, the defaults will all be
          fine. When you want to, read up on the Global
            Template Settings to see all the power you have.
Adding an Insight Graph to a Window
     The hardest part of adding the Graph is deciding on
      what exactly the Graph is going to show. In other words the data is
      probably right there in the dictionary, but you need to get the
      relationship right in your mind first. After that it's easy.
      
      
        - Go to the Window Editor
- Either
 
 Click on the Populate menu and select Control Template, and then
          choose the Insight Graphing Control.
 
 Or
 Place a Region Control on the screen. When asked, select Insight Graph
          for the region.
- Go to Actions for the control. Set the various graph properties
          here. There will appear to be quite a lot to do at first glance, but
          after you've done a couple it will get easier. 
 
 Remember, the interface is dynamic - as you get the hang of it go back
          to the global extension and increase the Template
            Interface Level in order to see more options.
 
 A complete list of all the settings, and what they all do, can be
          found in Options
            for the Insight Graph Control Template.
Adding an Insight Graph to a Report
    
      Printing Insight Graphs on reports is supported. There is however a
      problem.
      Due to the nature of report writing in Clarion it is likely that you've
      either
      
        
        a. 
used the
          standard report templates,
        b. 
used a 3rd
          party report template, or 
        c. 
hand-coded the
          report yourself.
        
        In addition to this, the placement of graphs on a report will obviously
        differ greatly from one report to the next. We have therefore tried to
        make the template for placing a graph on a report as flexible as
        possible.
        
Using the Standard Report
          Templates 
        If you are using the standard report templates, we recommend
        the following steps for adding a graph to your report:
        
          - Make a new report band.
- Give the band a name (for example, Graph) and a use equate (for
            example ?Graph).
- Populate the Insight Control Template onto the band. Set the size
            of the graph as you wish.
- Select from the default options for the graph (Print at Beginning
            of Report, Print at End of Report, Other).
- Set the filter for the band. To do this, close the report editor,
            click on the Report Properties Button, tab across to the Filters Tab
            and select the filter for the Graph Tab.
        Tip: If you selected Print at
        Beginning or Print at End, set the filter to 1=2. This will ensure that
        the report template does not trigger the graph. Instead, the graph
        template
        will trigger itself.
        
        
Tip: If you selected Other then enter
        the appropriate filter here. If you want to trigger the graph yourself
        by hand-coding then set the filter to 1=2.
        
        
Using some other 3rd Party
          Report Template
        The Insight Template generates four different bits of code for the
        report. The first is the View (or Views) for the object, along with the
        object
        definition. This is done in the Data Section of the template.
        
        The second consists of any overriding methods that may be required by
        the template.
        
        The third and fourth pieces are generated together in the Procedure
        Routines Section. You need to call the first routine to initialize the
        graph. This is done just after the 
open(report)command.
        You can simply call the routine in the appropriate place, for example: 
        
        
open(report)
          do InitThisGraph1 
        
        The second routine actually reads the data from the file or queue and
        prints the graph
        for you. You call it by simply adding the lines
        
        
do DrawThisGraph1
          do PrintThisGraph1
        
        where you want the graph to print.
        
        If you have multiple graphs on the same detail, you will need to call
        the drawing routine for each of them individually before calling the
        printing routine for the last one. Calling the printing routines for the
        other graphs is not necessary. For example, your code would look
        something like this:
        
        
DO DrawThisGraph1
          DO DrawThisGraph2
          DO PrintThisGraph2
        Last, but not least, be sure to kill the graphs when the report closes
        to avoid memory leaks: 
        
        
DO KillThisGraph1
          DO KillThisGraph2
        
        Tip: The InsightCPCS example shipped with Insight shows how to add an
        Insight graph to a CPCS report.
        
Hand-Coding The Report Yourself
        You can add the necessary code to your report by hand as well. The
        easiest way to do this is as follows:
        
        
          - Create a basic report and populate it as described in Using
              the Standard Report Templates.
- Cut & Paste the code from the generated report into the
            hand-coded report. This code will consist of two (possibly three)
            sections.
          - Section 1: The object declaration and
            associated Views.
- Section 2: The procedure routines
            (DrawGraph, PrintGraph and InitGraph).
- Section 3: (may not be there) The new
            methods for the Graph object. These methods only exist if you have
            set certain options, so if you can't find them, don't worry.
Examples
        All the 
Examples Shipped with Insight include
        examples of putting graphs onto reports.
      
 
      Examples
      
        The examples shipped with Insight can be found in the 
\Clarion?\3rdparty\Examples\Insight
        directory (where \Clarion? is your Clarion 5, Clarion 5.5 or Clarion 6
        directory).
        
        Examples include:
        
          - ABC: A single EXE based on the ABC
            templates. See \ABC\School.app.
- Legacy: A single EXE based on the Legacy
            templates. See \Legacy\School.app. 
Intermediate Level Graphs : Making your
        Graph Interactive
      Now that you've got a graph on your window, you can start getting really
      creative. This section assumes that your 
Template
        Level is set to Intermediate or higher.
      
        Mouse Click Actions
      The Mouse Click tab lets you set the default action for the Left-Mouse
      click and also the possible actions for the Right-Click menu. Most of the
      items need little explanation. See the 
Mouse
        Click Tab section of the Insight Template Guide for more information
      on how to implement these options. 
      
      
        - Zoom In: Allows you to zoom in on the
          graph.
        - Zoom Out: Zoom out on the graph. 
        - Cycle Sets: Rotates the order of the data
          sets on the graph. Use this if you want to bring a specific set to the
          front of the graph.
        - Drill Down: This allows you to drill down
          to another graph. The idea is that you can create multiple graphs at
          the same place in the window, with all of them except the top one
          hidden. As you drill down, the current graph is hidden and the new
          graph is displayed. The useful thing here is that the data displayed
          by the graph you are drilling down to can be made to depend on the
          point of the top graph last clicked on. See Setting
            Up a Drill Down/Back Up Sequence. 
        - Graph Type: Allows the end user to change
          the type of the graph.
        - Remember Graph Type: Save the last-chosen
          graph type for this graph in the INI file and restore it the next time
          this application is opened. 
        - Copy: Copy the graph to the windows
          clipboard.
        - Save As... : Allows the graph to be saved
          as a BMP or PNG file.
        - Print Graph: Prints the graph on the
          current printer.
Mouse Move Actions
      As the mouse moves over the graph it is often nice to be able to see the
      values of either the current mouse position (line graphs) or the item
      under the mouse (bar and pie graphs). This information can then be
      displayed on either the status bar, window caption, in the tip, or on a
      control elsewhere on the window.
      
      
Tip: Only those sets which have a set
      name will appear in the values list. To suppress a set, make sure its set
      name to blank.
      
      For more information on implementing the mouse over actions, see the
      section on the 
Mouse
        Move Tab in the Insight Template Guide. 
Intermediate Level Graphs: Mutiple Y-Axies
    
      You may want each of your data sets to have its own y-axis. The end-result
      would look something like this: 
      
       
      
      Doing this in Insight is easy:
      
        - Make sure your Global
            Template Level is on level Intermediate or higher.
- Go to the Y-Axis
            Tab and tick the Use a Separate Y-Axis for each Set checkbox.
- Go to the Y-Axis
            Tab for each Set, and adjust the settings there. 
Intermediate Level Graphs: Setting Up a
      Drill Down/Back Up Sequence 
    
      Insight has an exciting new feature allowing you drill down from one graph
      to another.
      
      Say, for example, that you had a bar graph representing the total sales of
      the twelve departments in your store. Suppose also that you can break down
      the sales of each department into several smaller categories, depending on
      the department. Suppose now that right-clicking on a bar and choosing
      Drill Down makes the graph display the sales break-down for the department
      to which the bar belongs. Insight makes this possible in just a few easy
      steps.
      
        - Add a graph to your application and configure it to display the data
          of the top graph - lets call this the Level 0 graph (displaying the
          total sales of each department in your store). Suppose its formal name
          is ThisGraph0. 
        - Now add a second graph over the first, and make sure that this
          region is invisible - lets call this the Level 1 graph. Suppose its
          formal name is ThisGraph1. 
        - Configure the second graph to display the relevant data - we will
          fill in the filter on the data below. 
        - Note that for each graph with name ThisGraphN
          in your application, the template automatically creates the following
          local variables: 
        ThisGraphN:ClickedOnPointName    string(255)
        
        ThisGraphN:ClickedOnPointNumber  real
        
        
        ThisGraphN:ClickedOnPointName contains
        the point name of the point on which you last clicked on ThisGraphN. ThisGraphN:ClickedOnPointNumber works
        similarly. 
      
        - Now Set up the Filter on the Primary
            Source Tab of the Level1 Graph by making use of the ThisGraph0:ClickedOnPointName
          and ThisGraph0:ClickedOnPointNumber
          local variables. If, for example, MySource1:DepartmentName
          holds the department name for the data to be displayed by ThisGraph1,
          then you could set the filter to be MySource1:DepartmentName
            = ThisGraph0:ClickedOnPointName to get the desired result. 
      The DrillOnStores procedure (the Stores menu item on the Specific
      Configurations menu) of the 
Included
        School Example has implemented the above steps to give you a working
      example.
    
Advanced Level Graphs: International
      Language / Translation Support
    
      Note: The 
Template
        Level on the global extension has to be set to 
Advanced
      for you to make use of this feature.
      
      Insight makes it possible for you to translate the right-click menu
      options to any language of your choice. To do this, go to the Global
      Extension, and then to the 
Global
        Advanced Tab. Enter the text you would like to be displayed as your
      menu options here. Note that if you are entering a fixed value then you
      must use quotes. You are also allowed to use variables here.
    
 
    Advanced Level Graphs: Manually
      Printing Screen Graphs
    
      Note: The 
Template
        Level on the global extension has to be set to 
Advanced
      for you to make use of this feature.
      
      There are 3 ways to make a graph appear on paper at the printer. The first
      is to make a report with a graph on it (See 
Adding
        Graphs to Reports). The second is to use the "right-click" Print
      feature (See the the section on 
Mouse Click
        Actions above). The third is to call the 
PrintGraph()
      method. The SetReportProperties() method has been supplied to be used in
      conjunction with this method call.
      
      The PrintGraph() method takes four parameters. The syntax is:
      
      
PrintGraph (string
        DeviceName, long ProgramerId=0,
        long Width=220,
        long Height=170)
      
      The 
DeviceName is the name of the printer
      you would like to print the graph. If blank, the graph is sent to the
      current default printer. The 
ProgrammerId
      is there purely for the benefit of the programmer (it comes in handy if
      you use the SetReportProperties method, discussed in a moment.) The 
Width and 
 Height
      parameters set the width and height of the graph control on the page.
      
      The SetReportProperties() method is called from inside 
PrintGraph()(after
      the internal report structure is opened). SetReportProperties() is there
      to allow you to set additional report properties (for example the paper
      size, report orientation, and so on) before the internal report is printed
      by 
PrintGraph(). The
      code to do this can just be embedded in SetReportProperties(). The syntax
      for the method is:
      
      
SetReportProperties (long
        ProgrammerID)
      
      In your embed code you'll have access to the 
ProgrammerID.
      This is the same number as was passed to the 
PrintGraph()
      method. This allows you to have multiple behaviors in the
      SetReportProperties() method. Note that the right-click Print option calls
      this method with a 
ProgrammerID of 
255. 
      
      To generate this method so that you can embed your own code in it, go to
      Actions of the graph control, and then to the 
Advanced
        Tab. Tick the option named Generate SetReportProperties on. Then use
      the embeditor to add any code you'd like.
      
      Examples:
      
      
ThisGraph1.PrintGraph('')
        ThisGraph1.PrintGraph('Laser Series Printer')
        ThisGraph1.PrintGraph('',1,100,100)
      
      Tip: The 
GraphSales
      procedure in the Insight School Example
      (\clarion?\3rdparty\examples\insight\abc\school.app) has a print button
      that uses these techniques.
    
 
    Advanced Level Graphs: Adding to the Available
      Fonts List
    
      
      Note: The 
Template
        Level on the global extension has to be set to 
Advanced
      for you to make use of this feature.
      
      There is the danger when working with fonts that the font your program
      requires will not be present on the end-user's computer. Therefore,
      instead of presenting you with a list of all the fonts available on your
      computer in the templates, we present a subset consisting of the most
      common fonts. These include Arial, MS Sans Serif, Times New Roman, and so
      on.
      
      There are however cases where you would want to add a font to this list.
      For example, you may need to use a font which supports a different
      character set, or you may want to use your favourite exotic font.
      Fortunately, we have a way for you to do this.
      
      To add fonts to the available list, follow the two easy steps below:
      
        - Using Notepad (or any other text file editor), create a file called
          Fonts.Ini in the \Clarion?\3rdparty\Bin
          directory.
- Inside this file put a list of the fonts you would like to include.
          Note that this file isn't actually an INI file, so section headings,
          etc. are not required. Your file might look something like this: 
Verdana
      
      Tahoma
      
      Comic Sans Ms 
      
      Notethat the items in this list are added
      to the standard Insight list, so you don't have to add the standard ones
      here too. You only have to add your new special ones.
      
      
Tip: Please remember - you need to enter
      the name of the font exactly as it appears in Windows. And also remember,
      if you use an exotic font, then you need to make sure it is on your
      customer's machine as well.
    
 
    Advanced Level Graphs: Using a Variable
      Number of Sets
    
      Note: The 
Template
        Level on the global extension has to be set to 
Advanced
      for you to make use of this feature.
      
      Consider the following graph:
      
      You have a Invoicing type program where the different products are broken
      up into departments. The number of departments and their names are set by
      the user and can vary from site to site.
      
      Now you want to graph the total sales for each month of the year, but you
      want to include all the departments on the graph as different sets.
      Clearly, the number of departments in this example will vary, and up to
      now we have only seen how to define the sets in the template. Insight does
      however cater for this phenomenon of a variable number of data sets, and
      setting this up is actually quite easy. 
      
      Before continuing, let's review the existing methods for creating graphs
      with a fixed number of sets. First, you can add multiple entries to the 
Data Tab. That would
      look something like this: 
      
      
 
      
      You can also create multiple entries on the 
Sets
        Tab:
      
      
 
      
      Using filters and ranges it is possible to create a fixed number of sets,
      and it's easy to put the data in the right set.
      
      In the case of a variable number of sets, though, the secret is to create
      just one set, and then to use the 
Override
        Set Number facility on the 
Advanced
        Tab:
      
      
 
      
      By setting the Set Number explicitly to a variable or expression, you can
      send the data to different (and a variable number of) sets.
      
      Note that all Sum, Average and Count functions should work fine, even in a
      variable set environment, and even if the the data is not ordered.
      
      For a more detailed example on how to implement this, see the 
JumpStart
      section in this document. The source code is available in your 
c:\clarion?\3rdparty\examples\insight\jumpstart
      folder.
    
 
    Advanced Level Graphs: Drawing on your Graph 
    
      Some users find it useful to be able to draw their own shapes and write
      their own text on the graph area. With Insight this is possible by making
      use of some 
low-level
        drawing methods. 
      
      To start drawing on your graph, you first need to make sure that your 
Global Template Level
      is set to Advanced. Now go to the 
Advanced
        Tab of your Insight control, and tick the 
Generate
        Draw() checkbox. This tells the Insight template to generate the 
.Draw() method. 
      
      All you need to do now is to embed the code needed to display the objects
      and text you want on your graph in the 
.Draw()
      method, 
after the parent call. Make sure you
      call 
.Display(). after
      adding all the text and objects to your graph, as otherwise your changes
      will not reflect onscreen.
      
      Note that if your desire is to draw horizontal or vertical lines on your
      graph, one or two calls to 
.AddSpecialAxis()
      may accomplish what you need. Note that this method does not fall under
      the low-level drawing methods, though. Here, you only need to make your
      calls to 
.AddSpecialAxis()
      followed by a call to 
.Draw()
      at an appropriate place in your code. 
      
      An example illustrating the use of the low-level drawing methods can be
      found in the 
included school
        example - see the PreDrawn window under the Advanced menu.
    
How to Know When to Use a Pie Graph
    
      We thought it might be worth mentioning some tips and tricks regarding how
      best to represent your data, especially with respect to pie graphs.
      
      Firstly, a pie graph is expected to have around six slices. If there are
      many more slices, it is usually because there are a number of very small
      slices. In the latter case, it is advisable that these get combined to
      form one slice labeled "Other". Doing this will not only make the pie
      chart easier to understand, but the labels for the pie slices will also
      have more space and will therefore be more legible.
      
      Another thing we also recommend is that you order your pie slices from
      largest to smallest . Again, this will impart more information to the
      reader by making the slices more easily comparable.
      
      Playing around with certain pie properties, such as 
PieAngle
      and 
PieLabelLines,
      may also improve the way your graph looks to some extent. For example,
      Insight tries its best to calculate the optimum number of lines over which
      the data label for each pie slice should be spread. You might, however,
      find that the graph layout improves when setting 
PieLabelLines
      to 2 when insight is choosing 1. In cases where the left-hand side of your
      graph looks cluttered, you can also try setting 
PieAngle
      to merely 1 or 2 (degrees), especially if your last slice is tiny. This
      will move the small slice and its label to the right, making more space
      for the rest of the data labels on the left. 
      
      If none of the above suggestions make your pie chart seem any friendlier
      to the eye, it may be that a pie is not the optimal representation for
      your data. Bar charts are often better representations in these cases. 
How to Use the Standard Windows
      Colors
    
      The good news is that Insight now supports the use of the Standard Windows
      Colors. The way they have been implemented is that the template creates a
      number of local variables (actually belonging to a group) which contain
      these values. They are populated when a window or report containing an
      insight graph is initialized. You can use them anywhere in the Insight
      template or in the rest of your program in the same way you would use the
      usual color equates (e.g. 
COLOR:Aqua). Note
      that for every insight object another such group is created. 
      
      
Tip: Note that you are actually using
      variables here, and not equates. Hence, In some cases, such as on the 
Colors Tab of a
        Given Set, it might be necessary to tick the 
Use
        Variables for Colors checkbox. 
      
      
Note for Hand-Coders: See the 
.GetWindowsColors()
      method in the Insight Technical Guide.
      
      The available colors may vary depending on the version of Windows you are
      running. The names have to a large extent remained the same, except where
      Clarion does not allow it - so, for example, 3DFace has become Face3D.
      Assuming your Insight graph object is called 
ThisGraph1,
      the available colors are as follows:
      
      
ThisGraph1:Color:Scrollbar 
        ThisGraph1:Color:Background
        ThisGraph1:Color:ActiveCaption
        ThisGraph1:Color:InactiveCaption
        ThisGraph1:Color:Menu
        ThisGraph1:Color:Window
        ThisGraph1:Color:WindowFrame
        ThisGraph1:Color:MenuText
        ThisGraph1:Color:WindowText
        ThisGraph1:Color:CaptionText
        ThisGraph1:Color:ActiveBorder
        ThisGraph1:Color:InactiveBorder
        ThisGraph1:Color:AppWorkSpace
        ThisGraph1:Color:Highlight
        ThisGraph1:Color:HighlightText
        ThisGraph1:Color:BTNFace
        ThisGraph1:Color:BTNShadow
        ThisGraph1:Color:GrayText
        ThisGraph1:Color:BTNText
        ThisGraph1:Color:InactiveCaptionText
        ThisGraph1:Color:BTNHighlight
      
      ThisGraph1:Color:DKShadow3D
      ThisGraph1:Color:Light3D
      ThisGraph1:Color:InfoText
      ThisGraph1:Color:InfoBK
      
      ThisGraph1:Color:HotLight
      ThisGraph1:Color:GradientActiveCaption
      ThisGraph1:Color:GradientInactiveCaption
      
      ThisGraph1:Color:MenuHighlight
      ThisGraph1:Color:MenuBar
      
      ThisGraph1:Color:Desktop
      ThisGraph1:Color:Face3D
      ThisGraph1:Color:Shadow3D
      ThisGraph1:Color:Highlight3D
      ThisGraph1:Color:HiLight3D
      ThisGraph1:Color:BTNHiLight
    
How to Use Insight in a Multi-DLL Application
    
      Simply make sure you add the Insight Global Extension to every DLL,
      program or anything else that makes use of Insight Graphing. 
      
      Special Information for Clarion 5 Users
      
      It is our goal to support Clarion 5 for as long as is possible. However,
      Clarion 5 does not offer all the facilities that Clarion 5.5 and later
      offer. Thus there are occasionally small additional tasks required if you
      are using Clarion 5.
      
1. Define needed in Local Mode
      If you are compiling in 
local mode , then you
      need to add the following define to your application:
      
      _IGDLL_=>0
      
      Failure to do this will result in a GPF on any procedure that contains a
      graph.
      
      To add the define to your application:
      
        - Open the app 
- Click on the PROJECT button
- Click on the PROPERTIES button
- Click on the DEFINES tab
- Enter
 _IGDLL_=>0
Common Errors
     1. The xxx.Exe file is
        linked to missing exportyyyyy
          
        This means that you have an old Insight DLL in the
      application directory or in the path. Check your machine for C60IGX.DLL
      (or C55IGX.DLL, or C5IGX.DLL, depending
      on your Clarion version). 
      
      
2. The Right-Click, Left-Click or MouseOver
        functionality has stopped working.
        
      The IMM (Immediate) attribute has been turned off on the Insight
      control.
      
      
3. I'm using Clarion 5 and my APP GPF's whenever I get
        to a window with a graph.
        
      See the 
Special Information for Clarion
        5 users section.
      
       
4. When I try to add an Insight Graph to my window, I
        get a whole lot of messages of the form "Unknown Variable
        '%GlobalGridVGridColor'.
        
      Before adding an Insight Graph to your application, make sure you
      have 
Added the Global
        Extension. 
      
      
5. When compiling my
        application, I get errors of the form "Syntax error: Prototype is:
        SETPOINTNAME(INSIGHTROOT, long)
        " and "Syntax error: Procedure doesn't belong to module:
        THISGRAPH1.SETPOINTNAME".
        
      This often happens when one embeds code in a procedure that appears
      when the Source is being edited, but that is not actually included in the
      generated source module. For the above error in particular, the problem is
      solved by entering a '+' in the
      Point Name field on the X-Axis Tab. For other methods, check the specific
      entry under the 
Embed
        Points Section of the Technical Guide. 
    
 
    Tips & FAQ
     1. Clarion Versions: Insight
      is available for Clarion 5, 5.5, 6.1 and 6.2. There is no upgrade charge.
      However, you will need the correct installer to match the version of
      Clarion that you are using. Download the correct version from 
www.capesoft.com\insightd.htm.
      
      
2. Does Insight use an OCX? Insight does not
      make use of any external OCX or other installed component. Insight does
      use a DLL containing pure Clarion code, which you can ship with your
      program. See the 
Distribution section. 
      
      
3. Does Insight have to use the DLL, or can you make a
        single EXE? Insight uses a DLL when you are compiling in
      Stand-Alone mode (in this mode you are shipping Clarion Runtime DLL's as
      well). If you compile in Local mode, the Insight code is linked into your
      single EXE.
      
      
4. Is there any limit to the number of sets on a graph?
      None, other than practical screen real-estate issues.
      
      
5. Is there any limit to the number of graphs on a
        window or report? Not that we're aware of. On a window only
      visible graphs are loaded and drawn, so performance is not an issue.
      
      
6. Can graphs be placed side by side on a report?
      Yes. There is no limit to the number of graphs on a detail, and no limit
      to the number of details containing graphs.
      
      
7. Can you add graphs to existing reports? Yes.
      The template supports automatically placing graphs at the beginning or end
      of the report. With a line or two of code (explained in the section on 
Adding Graphs to Reports) you can put the
      graph wherever you like.
      
      
8.The templates seem to imply that I need two or more
        related files. What if I just want to graph points from a single file?
      You can ignore the Related Files Tab.
      
      
9.The range and/or filters for the graph are not
        working. If you are using your own variables (i.e. not file
      fields) in the range or filter, and these variables do NOT appear on
      either the Local Data button or the Global Data button, you will need to
      BIND the fields yourself:
      
        - If you are using ABC, go to the ThisWindow.Init method and for each
          variable embed the code BIND('variable',variable)
- If you are using the legacy templates, go to the PrepareProcedure
          routine and embed for each variable BIND('variable',variable)
10. Making your own point names: There are cases
      where you will want to insert your own code for setting or formatting the
      point names. For example, you might want to convert a month number (1 to
      12) to a name (Jan, Feb and so on). The method for doing this is a two
      step process:
      
        - On the local extension's X-Axis
            Tab, set the Point Name to + (yep,
          that's just a single plus sign). This tells the template to generate
          the correct embed point for you.
- Go to the Embeditor for the procedure, and look for the
          SetPointName() method (it'll be right near the bottom). Enter your
          code here. At this point the fields being graphed and any hot fields
          are 'live'. So your code might look like this:
 
 execute
          month(fil:date)
 ReturnValue = 'Jan'
 ReturnValue = 'Feb'
 ReturnValue = 'March'
 ReturnValue = 'April'
 ReturnValue = 'May'
 ReturnValue = 'June'
 ReturnValue = 'July'
 ReturnValue = 'Aug'
 ReturnValue = 'Sept'
 ReturnValue = 'Oct'
 ReturnValue = 'Nov'
 ReturnValue = 'Dec'
 end
 
 And then the generated
 
 Return ReturnValue
11. Why are the number of x-axis grid lines less than
        what is specified on the Grid Tab? On the 
X-axis
        Tab there is a check-box labeled 
Optimize
        X-ticks. If this has been checked, Insight will automatically
      calculate and use the optimal number of grid lines. For the quantity
      specified on the 
Grid
        Tab to be used, the Optimize X-ticks check-box on the X-Axis Tab has
      to be unticked.
      
      
12. Why is my flat button not being displayed as flat?
      Go to the
 Advanced
        Tab of the template (the global extension must have its 
Template
        Level set to Advanced) and uncheck the "Enable window buffering
      mode" checkbox. If this option is checked, the line of code 
window{
prop:buffer} = 1 is generated and called
      directly after the Insight Init() method. 
      
      
13. Why does my graph take so long to load when the
        window starts up? Go to the 
Advanced
        Tab of the template (the global extension must have its 
Template
        Level set to Advanced) and uncheck the "Reset graph on window reset"
      checkbox. If this option is checked, the graph is reset every time the
      window's Reset() method is called. 
      
      
14. In my 3D pie chart with custom colors the drop
        colors are not the same as the slice colors. How can I change this? The
      color used by Insight to draw the drops is the Shadow Color - this is
      changed on the same tab as the Fill Color that you customized (see the 
Insight Control's
        Colors Tab). If you leave the shadow color to 
COLOR:None,
      Insight will use the default colors for the drops, which explains why they
      don't match up to your customized colors. 
      
      15. 
My report that includes an Insight graph takes
        forever to produce. The problem is that the graph gets redrawn
      way more times than is necessary. To prevent this, the DrawThisGraph
      routine needs to be filtered out in the TakeRecord() method. To do this,
      go to the Procedure Properties of the report, click on the big Report
      Properties button, go to the Filters Tab, choose the Graph entry and enter
      "1 = 2". 
      
      16. 
My Y-Axis is not being scaled as I specified. Firstly,
      note that the default number of y-axis grid lines is 5 (you can change
      this on the 
Grid Tab).
      Insight always draws the exact amount of grid lines specified. If you
      specify the max (and min) value for the y-axis and the step value, and
      these three values don't all line up perfectly, Insight will change some
      of your specified values to allow it to draw the graph. For example, it is
      impossible to draw a graph with 5 y-axis grid lines, a max value of 50, a
      min value of 0 and a step value of 15, and Insight will modify at least
      one of these values before drawing the graph. Note that using multiple
      y-axies complicates this further, because all the y-axies must have the
      same number of grid lines.
      
      
17. When there is an x-axis point with no data values
        plotted at that point, Insight just leaves it out. I want to see every
        x-axis point, even if there is no data for it. You need to
      specify the point numbers (and names) yourself. If you don't, Insight will
      do this for you automatically and this will result in empty x-axis points
      being ignored. To do this, go to the 
X-Axis
        Tab and fill in the 
Point
        Number (and 
Point Name)
      (untick Automatically Generate). 
      
      
18. How can I change my graph header at run time? Embed
      the code 
self.
headername
        = 'New Header Name'
      in the ThisGraph.Reset() method. Note that, if you have set the 
Graph
        Heading in the template, the code for the header is also generated
      in the ThisGraph.Reset() method. Therefore, either make sure you leave the
      heading in the template blank, or embed the above line of code after the
      parent call. 
      
      
19. At a given x-axis point, how do you make sure all
        the bars touch each other? Set the 
Point
        Width on the 
Set
        Tab to 100. 
      
      
20. I have four numeric variables I want to plot on a
        pie chart, but it only shows the first variable - the pie is one big red
        circle. What am I doing wrong? There are two things you need to
      make sure of when using variables to plot your pie graph: Firstly, make
      sure you have filled in the Point Name and Point Number for each variable
      on the 
X-Axis Tab
        of the Set Window - note that this is NOT the main X-Axis Tab.
      Because you are using variables, and since these tend to be single-valued,
      Insight does not know which point on the x-axis to plot the value in the
      variable for. For the first variable you can fill in 1, for the second 2,
      and so on. Then you must also make sure Insight knows that all the values
      in these variables belong to the same set - by design, a pie graph
      consists of slices that are points belonging to a single set. To do this,
      for each variable go to the 
Advanced
        Tab of the Set Window (make sure the 
Template
        Level is set to Advanced on the global extension), click 
Override
        Set Number, and fill in 1.
      
      
21. I have a variable number of data sets in my graph.
        However, when there are just one or two sets present, all of the data
        sets are still listed in the legend and point summaries. What
      happens is that the legend and point summaries use the data sets that have
      nonempty set descriptions. Every time the graph is reset, the sets are not
      cleared or deleted, as this would result in all the information you have
      saved regarding the sets being deleted, e.g. the color, pattern, y-axis
      information, data-label formats, etc. If you are not concerned with this
      information, you could use the 
.ClearSetQ()
      to delete all the sets. 
      
      The safer option is to embed in the .
Reset
      method, before the parent call, code that calls 
.SetSetDescription(Set, '') for each Set. For example, the code
      will look something like this:
      
      
set(Graduates)
        loop until Access:Graduates.next()
          self.setsetDescription(Graduates.year, '')
        end
      
      The sets appearing in the graph will have their descriptions added by the
      parent call, so you need not worry about that. For a working example, see
      Variable Sets under the Specific Configurations menu in the 
included
        School Example.
      
      
22. Why does my pareto graph not have the same number
        of x-axis grid lines as specified on the Grid Tab? On the 
X-Axis
        Tab, if 
Optimise
        X-Ticks is on, Insight will calculate the optimum number of x-axis
      grid lines and ignore the number specified on the Grid Tab.
      
      
23. I would like to add a note to my graph giving a
        more detailed explanation of its contents. How can I do this?
      Make sure that your 
Global
        Template Level is set to Advanced. Then go to the 
Advanced
        Tab of your graph and tick the 
Generate
        Draw() option on. Then go to the embeds of your graph control and
      insert code that resembles the following in After the Parent Call:
      
      
self.SetFont('',
        12, font:bold,
        Color:White, 0)
        self.Show(x, y, 'SampleText', 0)
        self.Display() 
      
      See also the PreDrawn window of the 
included
        School Example, and the 
SetFont(),
      
Show() and 
Display()
      methods.
      
      
24. Is there any chance of adding a horizontal scroll
        bar to my graph? Go to the 
Properties
        Tab of your graph. You will see there are two General Properties,
      WorkSpaceWidth and WorkSpaceHeight. Set these properties to the width and
      height you would like your graph area to be. If these are larger than the
      dimensions of the graph region you have put down, scroll bars will appear
      where necessary.
      
      
25. Is there a way to add extra horizontal and vertical
        lines to my graph? Use 
AddSpecialAxis().
      
      
26. How can I get rid of the grid lines on my graph?
      Go to the 
Grid Tab
      and enter 1 for the quantity.
      
      
27. The data label nearest to the left edge of my graph
        is not being displayed. There is not enough space for the label
      to be displayed without writing over the y-axis. You will probably find
      that, on a graph like this, the rest of the data labels are overwriting
      each other and the bars/lines/etc. The best solution is to go to the 
Fonts
        Tab, double click on the Data Labels entry and change the Font Angle
      to 90. 
      
      
28. In my line graph, if I override the default colors,
        the line color changes but the legend retains the shape color. Besides
      the Line Color, you also need to change the Fill Color (see the 
Colors
        Tab of each set). You will see that if you have shapes at the data
      points of your graph, they are colored using the Fill Color. Similarly,
      the colored blocks in the legend are colored using the Fill Color. 
      
      
29. I have filled in two data sources on the Data Tab,
        but only the sets of the first data source are being graphed. You
      more than likely have filled in the fields for the x-axis point numbers
      and point names on the 
X-Axis
        Tab using a field from one of your queues or files entered on the 
Data Tab. This will be
      problematic if the other file or queue gets the point numbers for its data
      from a different place (probably from a field in this same file or queue).
      In this case, what you need to do is tick the 
Each
        Set has its own Point Names and Numbers check box on the X-Axis Tab
      and then go to the 
X-Axis
        Tab on the Set Window for each set and fill in the point name and
      number for each individual set there. 
      
      
30. I named a trial app I was doing Insight.app This
        generated an error when compiling: missing procedure Draw(Insight). The
      insight graphing class file is called insight.clw - so by creating a
      insight.app, this will mean the default name is insight.clw - hence the
      name clash. Rename your app to something else. 
      
      
31. How do I change the colours and styles of points in
        a Total/Average/Count graph based on the current parent field?
      Note that a point gets drawn only when the parent field changes, i.e. the
      parent field will already have its next value by the time the point gets
      drawn. Hence, if you want to use the value of the parent field in your
      condition, you need to compensate for this. If your parent field
      increments by 1 every time, this can be done by using ParentField - 1 in
      the condition. Otherwise you will need to save the value of the previous
      parent field in a variable or in your queue/data source and use that in
      the condition.
    
 
    Programmers Corner: Labels 
    
      It may happen that you one day decide that you want to do some fancy
      tricks with the x-axis, y-axis and data labels. The aim of this section is
      to give you more information on how these work in Insight.
      
      Label information is stored in the 
LabelQ
      property. The 
LabelQ is a queue with the
      following declaration:
      
      
LabelQ      
        QUEUE
      Type           LONG
        
        Set            LONG       
        Point          LONG       
        DisplayText    STRING(50) 
        DisplayText2   STRING(50) 
        DisplayText3   STRING(50) 
        OriginalText   STRING(50) 
        X              LONG       
        Y              LONG       
        W              LONG       
        H              LONG       
        StartAngle     REAL       
        EndAngle       REAL       
                   END 
      
      The 
LabelQ stores all the labels
      including y-axis labels (
Type=1), x-axis
      labels (
Type=2) and data labels (
Type=3).
      A specific Queue entry can be located using the 
.GetLabel()
      method. The 
LabelQ is cleared completely
      by the 
.Reset() method.
      
      Y-axis labels are cleared and recalculated by the 
.Draw()
      method. Therefore these labels cannot easily be overridden.
      
      Data labels are not usually stored in the queue. However, if a data label
      does exist in the queue it will override the calculated label.
      
      The 
.Draw() method
      ultimately causes the labels to be drawn on the graph by calling
      .LabelAxis() (which is responsible for drawing x- and y-axis labels - it
      calls .LabelXAxis() and .LabelYAxis() to create the labels and then
      positions them), .DrawDataLabels() (which is responsible for drawing the
      data labels) and .LabelPieData() (which is responsible for drawing the
      labels on a pie chart).
    
 Version History 
     Download latest version 
here
      
      
       Version 1.97 - 24 May 2021
      
        - Build including DLL for Clarion 11.1
Version 1.96 - 25 September 2018
        - Build including DLL for Clarion 11
Version 1.94 - 25 February 2015
        - Build including DLL for Clarion 10
Version 1.93 - 21 January 2014
        - Build including DLL for Clarion 9.1 
Version 1.92- 29 August 2013
        - Build including DLL for Clarion 9 10324. You must update your
          Clarion 9 to 10324.
Version 1.91- 9 May 2013
        - Fix: When drawing background grid, the x-grid properties were being
          used instead of y-grid properties.
Version 1.90- 24 April 2013
        - Build including DLL for Clarion 9
Version 1.89- 18 Jan 2013
        - Custom formatting of y-Axis labels was not working. 
Version 1.88 - 19 July 2011
        -  Fixed incorrect versions of the binaries for C8.
Version 1.87 - 12 July 2011
        - Maintenance release for Clarion 8 compatibility.
Version 1.86 - 25 April 2011
        -  Fixed format issue on Open / Close values in tooltip on Hi-Lo
          graphs.
Version 1.85 - 12 April 2011
        -  Fixed: Calculation of Y-Axis bounds when graphing mixed Hi-Lo /
          Lines on very low values was allowing for incorrect allowances.
Version 1.84 - 4 April 2011
        - Fixed: Duplicate Symbol error in Clarion 7
          when used in conjunction with CapeSoft Draw.
Version 1.83 - Released 5 February 2011
        - Fix bug where point symbol did not display on first point on line
          graphs after a break for missing data.
Version 1.82 - Released 21 July 2010
        - Separate-Y-Axis property was not set if Display X-Axis-Labels was
          suppressed.
Version 1.81 - Released 27 May 2010
        - Resolves Duplicate symbol: $DATASTORE error occurring in C7.1.7118
          in local mode.
Version 1.80 - Released 07 April 2010
        - Resolves duplicate symbol error in C7.1 in local (lib) mode for apps
          using the Topspeed and DB4 file drivers with FileExplorer,
          OfficeInside and Insight Graphing.
Version 1.79 - Released 22 March 2010
        - Tweaks for C7 support in Local mode.
Version 1.78 - Released 7 October 2009
        - Removed spaces from example app name (C7 doesn't like spaces)
- Fixed bug in C7 EXP file - caused "Unresolved External" errors
Version 1.77 - Released 25 Sept 2009
        - fixed bug in drawing a Special Axis where the Axis was 1 pixel
          longer than it should be.
- fixed gantt mouse tips so they show both the start and end date.
Version 1.76 - Released 17 April 2009
        - A collection of speed improvements.
- Smarter determination of the graph x-Axis boundaries in some cases.
- Removed STOP left behind in version 1.75
Version 1.73 - Released 11 February 2009
        - Template change - Remove obsolete previewer code (which was causing
          problems in C7 loading an application).
Version 1.72 - Released5 January 2009
      
        - Template tweak to include the correct lib file into a converted
          C6-C7 application (for c7). 
Version 1.71 - Released 7 November 2008
        - Added properties to allow overriding of text on tooltips (High:,
          Low:, Open: and Close:). Properties are HighText, LowText, OpenText
          and CloseText respectively. 
- Made some changes to the way the grid works for Pareto and Gantt
          charts
- Some changes made to the way the view is generated in some cases -
          used to join report tables to the graph tables, not anymore
- In some cases the line styles were not working correctly
- Clarion 7 compatible
Version 1.70 - Gold released 22 January 2008
        - Tweaked some default template settings relating to graph subtypes
- Shipping data with the Insight CPCS example now
- For pies, the Point Name fields now stays enabled even though you
          don't want any labels displayed (so you can use those values in the
          legend)
-  Fixed some bugs relating to y-axis labels being positioned
          incorrectly
-  Fixed the mouse-over display for time charts
-  Sometimes time charts with a lot of data looked choppy - fixed this
- Mouse-over info for pies display correctly now 
Version 1.69 - Gold released 22 October 2007
        - Special Axies added to the x-axis were not appearing in the right
          place
- Special Axis labels were not being coloured because of changes made
          in the previous version 
- Added a feature allowing the user to move the position of the label
          of a special axis by a specified number of pixels - added these values
          as paramaters to AddSpecialAxis
-  Special Axis labels were only showing up on the x-axis when there
          were whole numbers
- Added a parameter to AddSpecialAxis
          allowing you to specify that the label overwrites any x-axis labels
          that are there already - the default behaviors is that the normal
          x-axis labels wont be drawn if the special label is positioned over
          them. Set to 1 to draw them anyway. 
- When x-axis labels weren't being drawn but special labels were, the
          special labels weren't being justified correctly
- Added XOffSet and YOffSet properties to the LabelQ
          - the label will be moved up according to these offsets
-  Added an embed point in the generated Graph View just before the
          end statement 
- Could not override the shape of a point in a line graph even if the
          pattern was set to empty
-  Fixed some issues regarding scaling of the y-axis in Gantt Charts -
          you could not set the y-axis min or max up to now
- Some graphs were taking forever to draw (it would appear as though
          the program is hanging) because of issues with setting the label fonts
Version 1.68 - Gold released 24 August 2007
        - Added fields to
            the Labelq to allow the user to set the font for each individual
          X-Axis and Y-Axis label. Created the new procedure, SetLabelFonts,
          in which you can loop through the LabelQ to set these font properties
          for each label. You need to tick the available option
            on the Advanced Tab to make sure this procedure is generated,
          though.
- You'll notice I dutifully updated the docs to reflect the above
          changes.
- Updated the docs with some more info on how
            to create pie graphs 
- Created a right-hand margin for the legend in certain positions
-  In the case where the set number is overridden, the data labels can
          now be switched off on the set's advanced tab (that wasn't working
          before)
-  The X-Axis Labels weren't being synced with the grid lines once you
          showed the labels only every so many points for line graphs. Fixed
          this.
- Created the LineFromZero
          property to make life easier for line-graph users - switch this on to
          draw the line graph from 0 on the x-axis instead of the traditional 1.
        
- Added functionality allowing you to display the data as percentage
          values (on the y-axis) by ticking a single checkbox/setting a single
          property. See the Use as Total
            for 100% checkbox on the Set Advanced Tab or the PercentSetNum
          property. 
- Created a bit more space between the left side of the graph region
          and the Y-Axis name. 
Version 1.67 - Gold released 24 April 2007
        - Fixed a y-axis labelling bug 
Version 1.66 - Gold released 27 March 2007
        - Fixed Autoshading - it was arbitrarily switching off on some graphs
          (actually the Highlight Intensity was changing arbitrarily). 
- Edited the template to stop the graph from crashing in reports when
          there are no records
- Included a new example showing how to use Insight with CPCS reports
          (see the InsightCPCS folder)
Version 1.65 - Gold released 17 November 2006 
      
      Version 1.64 - Gold released 8 November 2006
        - Fixed some pie legend problems - in some cases legend items were
          accumulating values from previous items 
Version 1.63 - Gold released 7 November 2006
        - Created SetMirrorText()
          to allow text mirroring in the graph image for right-to-left
          orientated windows 
Version 1.62 - Gold released 27 October 2006
        - Some fixes to the Highlight Intensity for Data Point Overrides
-  For printing, created the UnlockThreadForPrint
          property which can be set to 0 (Init sets this to 1). Basically, set
          this to 0 if you are using FixIT and all your other threads freeze
          while or after you are printing your graph. 
- Japanese and Arabic text space issues were fixed
- Japanese and Arabic text rotation issues were fixed 
Version 1.61 - Gold released 2 October 2006
        - Made small change to SetShade() to stop Insight from GPF'ing
          (regression in 1.60) 
- Added support for Japanese and Arabic text - test phase 1.
Version 1.60 - Gold released 29 September 2006
        - Introduced Highlight
            Intensity on the Set Colors Tab. See also DataQ,
          SetQ and SetSetColors()
          in the Technical Guide. 
- Fixed GetSystemMetrics API call - renamed to ISGGetSystemMetrics
- Introduced the Insight:Empty
          equate in the case you want no pattern on your black and white graph.
        
Version 1.59 - Gold released 22 September 2006 
      
      Version 1.58 - Gold released 20 September 2006
        - Minor fixes to shipped school example
-  Added support for mouse-over values in the case where
          workspacewidth and workspaceheight have been set
-  Edited the SwitchControls()
          function - gave it another optional parameter, pImageControl. If
          specified, Insight uses this image control to draw the graph on as
          opposed to creating a new image within the specified region. 
Version 1.57 - Gold released 18 August 2006
        - Fixed some issue that popped up with the previous release i.e. the
          initial drawing of black-and-white graphs
- Fixed the new SwitchControls()
          procedure so that it does not change the background color back to the
          default 
- The SaveAs window now saves your file as the correct type (png or
          bitmap) if no extension is supplied (thanks George) 
Version 1.56 - Gold released 8 August 2006
        - If the stacked property
          has any non-zero value other than 1, it works properly now too
-  Created the SwitchControls()
          procedure - to change the region in which an Insight object draws its
          graph. 
Version 1.55 - Gold released 7 July 2006
        - Fixed a bug in the template regarding the PRINT() statement for
          reports without prefixes
- Fixed the Global Colors Tab for the case where you create your own
          global default color schemes
- Pie graphs now display the labels for 100% slices correctly 
- Version 1.54's version numbers were never updated 
Version 1.54 - Gold released 24 May 2006
        - Fixed the Y-Axis scaling for in the case where StackLines
          is switched on.
- When BlackAndWhite is switched on, made sure that all fonts on the
          graph appear in black
- Updated the Changing Properties Window (ChangingTypes procedure) in
          the shipped School example to contain all properties on the Properties
            Tab.
Version 1.53 - Gold released 26 April 2006
        - Introduced the StackLines
          property. Set this to 1 if you want line or scatter graphs to be
          stacked when the Stacked property is on, 0 otherwise.
- Minor updates to template (the short data labels check box is no
          longer greyed out)
Version 1.52 - Gold released 17 January 2006
        - The Max Points
            to Draw feature on the Advanced Tab of the set should now be
          working correctly.
- Note that for pie graphs, if the above value is more than zero,
          Insight creates an "Other" slice incorporating the last slices into
          one.
Version 1.51 - Gold released 7 December 2005
        - Note: Changed the way iColor works.
          It is no longer a global variable. Every graph object will from now on
          have its own iColor group, and if your graph object's name is ThisGraph1,
          it will be called ThisGraph1:Color.
          See the Using
            the Standard Windows Colors section on how to use it. 
Version 1.50 - Gold released 30 November 2005
      
      Version 1.45 - beta released 28 November 2005
        - Made sure the Insight DLL is rebased for Clarion 6.2
- Improved the mouse-over information accuracy for line graphs 
Version 1.44 - beta released 22 November 2005
        - Minor updates to documentation
- Fixed some minor issues relating to labelling special axies on the
          x-axis at 90 degrees
-  Minor tweaks to the included school example 
- Made the stacking of line graphs on a line chart possible 
- Fixed the drawing of pie slices for certain special cases
- Pie drops are now correctly aligned with their respective pie slices
- Label lengths are now being correctly calculated, thus label
          positioning on the x- and y-axies work better now 
- When the number of x-axis grid lines are being calculated
          automatically for line- and scatter graphs, this number is now such
          that each point falls on a grid line. 
Version 1.43 - beta released 15 November 2005
        - Updates to documentation
- Now compatible with CapeSoft
            EZHelp 
- Tiny pie slices are no longer making the rest of the pie disappear
- Fixed some issues that .AddSpecialAxis()
          had with separate y-axies
- Special Axies can now have labels wherever on the graph the are
          placed (not just on the grid lines)
-  Stopped a GPF caused by the labelling of empty y-axies 
- Made formatting
            the y-axis labels for gantt charts easier and more user friendly
- Fixed some issues relating to the labelling of pareto and gantt
          y-axies at 90 degrees
-  Fixed the mouse-over information displayed for line graphs when all
          sets are to be included in the summary
Version 1.42 - beta released 3 November 2005
        - The global variable iColor was not being created by the template for
          applications containing only reports and no windows with graphs on
          them. Fixed this problem. 
Version 1.41 - beta released 25 October 2005
        - Fixed the zooming functions for time charts
-  Fixed some x-axis labelling issues for time charts
-  Fixed some formatting issues relating to y-axis labels
-  Display variables (such as entries and text fields) now display
          mouse-over information correctly (whereas before they did not display
          anything at all) 
- You are now actually able to fill in an exact x-axis label count,
          whereas before the spin box was constantly disabled
-  Filling in an Exact
            X-Axis Label Count when Spread
            X-Axis Labels is on now gives you the correct number of labels
          (hand-coders, see the ShowXLabelsCount
          and SpreadXLabels
          properties) 
-  Mouseover information was being displayed incorrectly when the
          y-axis did not start at zero - not anymore. 
- Fixed some Drill Down issues - top graph was not always disappearing
        
- Updates to documentation
- Updated the included example to include a drill down/back up example
          - see the DrillOnStores procedure 
- Made available the standard windows colors (e.g. Color:Window,
          Color:BTNFace, etc.) for use with Insight graphs - see the How
            to Use the Standard Windows Colors section (hand-coders, see .getWindowsColors()).
          
- Created the new PieLabelLines
          property (hand-coders, see PieLabelLines
            in the Technical Guide) 
- .GetPointSummary()
          now returns the correct values for when the y-axis does not start at
          zero (so now the mouse-over information is correct in this case)
Version 1.40 - beta released 11 October 2005
        - In 1.39, Insight was orphaning some embed points because they were
          renamed (sorry guys). Made it stop. 
Version 1.39 - beta released 10 October 2005
        - Very small bars are now being drawn correctly
- Added a New
            Property on the Y-Axis Tab allowing you to specify that Insight
          should ignore invisible sets when auto-scaling the y-axis (see also
          the YIngoreInvisibleSets
          property). 
- Created some extra embed points - one in the .Reset()
          method just before the parent call and one for each Insight Event
          before the generated code. 
- Fixed some zoom-related issues - when the application looses focus
          and then regains it the zoom is now restored (added a new ZoomPoint
          property; however, this is mostly for internal use).
-  Fixed some Gantt chart y-axis labelling issues
- Fixed some issues with Remember
            Graph Type
- Fixed some issues we were having with graphs on reports in Clarion
          6.2
- Tiny pie slices no longer ruin the entire pie 
- FONT:Underline is now working correctly in the headers
- Created the .ToClipBoard()
          method, and added a Copy
          option to the right-click menu
- Created the PieLabelLineColor
          property 
- Note: Changed the way the ClickedOnPointName
          and ClickedOnPointNumber local
          variables work: Instead of there being only those two variables for
          the entire application, there is now a YourNthGraph:ClickedOnPointName
          and YourNthGraph:ClickedOnPointNumber
          for each graph called YourNthGraph in
          your application. YourNthGraph:ClickedOnPointName
          contains the point name of the point on which you last clicked on YourNthGraph. YourNthGraph:ClickedOnPointNumber
          works similarly.
Version 1.38 - beta released 15 September 2005
        - Fixed some pareto x-axis and y-axis labelling issues
- Fixed some problems with the alignment of pareto x-axis labels 
- Added a new tick-box
            to the Mouse Click Tab giving you the option to save the graph
          type the user might have picked using the right-click menu 
- Fixed some template issues relating to global variables in the
          dictionary not being bound properly
Version 1.37 - beta released 05 September 2005
        - Stopped a GPF from happening on resize
- Removed some template errors and problems relating the the automatic
          binding of global variables
- Gantt bars can now be viewed in 3D
-  Removed the ugly rim around pies
-  Fixed some data labelling issues
-  Introduced a Point Value Format on the Mouse Move Tab
- Introduced a check box on the Advanced Tab of each set you can use
          to indicate that a set's data label format should be used for
          formatting its point values in the mouse over information
-  Made pie graphs draw more in the centre of the graph region
- Fixed some pie labelling issues relating to 0% pie slices
-  Fixed some issues relating to .GetPoint working incorrectly with
          pie charts
-  Fixed more pie labelling issues relating to pie labels appearing
          outside of the graph region
-  Made sure 3D pies always draw within the graph regions - pie drops
          were being ignored
-  Stopped application from crashing in the case of an entirely empty
          pie
-  Introduced the ability to format the percent value displayed in the
          pie data labels
- Stopped pie labels from overwriting legend 
- For BlackAndWhite graphs, made sure the legend and backborders all
          draw in black and white, and that the legend boxes are all filled with
          the correct patterns
- Also made sure the shapes on BlackAndWhite time graphs were filled
          with the correct patterns
- Note: Time graphs now default to
          drawing shapes at the data points, whereas before there were by
          default no shapes but just lines. This was done to make it consistent
          with the way line graphs work. 
- Short y-axis labels now have negative signs when they need to
- Fixed some major issues relating to the y-axis grid lines of pareto
          graphs
- Decreased the amount of space between pareto charts and their y-axis
          labels
- Improved the alignment of pareto y-axis labels
- The y-axis label format is now also used in the case that short
          y-axis labels are being used 
- Fixed some labelling issues relating to mixing scatter graphs with
          pareto graphs
-  Added and extra Set parameter to .AddSpecialAxis - this enables you
          to specify which set a special axis belongs to, and hence
          .AddSpecialAxis can be used even when there are separate y-axies
-  Note: Fixed some y-axis
          auto-scaling issues - it used to always start from 0 but now starts
          the y-axis higher up if there are no values near zero to be plotted on
          the graph 
- Increased the gap between the bottom of a pareto chart and the
          bottom of the graph region
- Stopped unused labels from being drawn in the top right-hand corner
          of some graphs
- Some more tweaks to the template appearance
Version 1.36 - beta released 28 June 2005
        - Made some major updates to the documentation - almost completed
- The Suppress Data Labels check box on the Advanced Tab of the Set
          Window was not working - fixed that
- Insight now allows you to specify a step value for the y-axis even
          when you enter your own min and max values
- Fixed some issues regarding data labels being too far from the data
          points 
- Made sure that lines, scatter graphs, legend boxes and y-axis labels
          are also drawn in black and white when the BlackAndWhite property is
          true 
- Made sure the legend boxes are filled with the correct patterns when
          BlackAndWhite is set
- For multiple y-axies, when suppressing a y-axis for a set, moved the
          rest of the y-axies up to fill the gap
-  Introduced an alternate
            data labels feature - allows you to specify which point in the
          set data labelling should start at
-  When suppressing a y-axis, its settings used to be grayed out - not
          anymore, because although it is invisible, it is still there and the
          graph gets drawn according to its settings
-  Fixed some y-axis labeling and scaling issues
- Made sure that run-time changes in the BlackAndWhite and PieAngle
          properties are reflected on-screen
- Fixed the fact that 3D pie drop-colors were sometimes incorrect -
          note that if you are customizing your colors you should set the fill
          color as well as the shadow color, as the latter is used for the drops
- Fixed some issues relating to specifying the color of a set using a
          variable
- Stopped pie labels from overwriting each other in some cases
-  Lots of minor tweaks to the template presentation
-  The last data label on a line or scatter graph used to disappear -
          not anymore
- Stopped the template from generating blanks instead of window names
          in certain special cases
- Fixed some issues relating to mouse-over functionality - stopped
          point names and y-axis values from being displayed if they were
          outside the show range (between ShowFromPoint and ShowToPoint)
- Also eliminated erratic behaviour sometimes occurring with the
          mouse-over functionality
- Changed the names of the Clarion 6.2 DLL and LIB files to match
          previous standards 
Version 1.35 - beta released 28 April 2005
        - Fixed issues with compiling a program containing a graph in local
          mode - no more crashing
- Some updates to the docs
- Adjusted template to generate embed points for events generated by a
          graph
- In the MouseMove tab, added an option allowing you to specify
          whether values should be displayed for all sets or only for the set
          the mouse is over
- Fixed issues regarding incorrect values being displayed on a mouse
          move
-  Increased the speed at which graphs load on window startup in some
          cases
- Minor tweaks and updates to the template
- Created a ClearSetQ() method that frees the setq - watch out, as it
          wipes out all the information relating to all of the sets
-  Fixed some x-axis labeling problems for scatter graphs
- Added a checkbox to the advanced tab of the template allowing you to
          prevent Insight from switching on the buffering property of the window
          - if you have flat buttons that aren't being displayed as flat,
          uncheck this. 
- Added the .pieAngle property, allowing you to specify the angle at
          which the first pie slice should be drawn - note that 0 degrees is at
          12 o'clock and the angle increases while moving clockwise
Version 1.34 - beta released 9 March 2005
        - Fixed some bugs regarding mixing graph types and incorrect bar sizes
Version 1.33 - beta released 3 March 2005
        - Minor tweaks and updates, minor updates to the docs
-  Fixed legend being displayed incorrectly
-  Fixed some x-axis labelling issues for time graphs
-  Fixed the fact that the base of a very short bar was sometimes not
          on the x-axis
-  Added a Jump Start
-  Updated the Example to include a Time Graph 
Version 1.32 - beta released 12 May 2004
        - Minor tweaks and updates
- Fixed pie slices going invisible where Size = Start
- Fixed resource leak when drawing lots of graphs
- Better support for European Character Sets
Version 1.31 - beta released 10 March 2004
        - Better support for variables when doing "set number overrides"
- Better support for formats when doing separate Y-Axis labels
Version 1.30 - beta released 9 March 2004
        - Fixed problem with errant Pie Slices
- Suppressed adding of Sets with Set Number < 1
- Added support for variable Set Descriptions when Override Set Number
          on.
Version 1.29 - beta released 27 February 2004
        - Fixed problem when changing Y-Axis values at runtime
- Fixed GetPoint method for Pie graphs
- Fixed possible problem with Graph label for top left slice.
- 1 slice, 3D pies, now have a drop height
- Fixed bold & italic font settings
- Fixed problem with SetQ.Type set to Insight:Line on Line Type graph
- Better support for European characters
Version 1.28 beta released 15 January 2004
        - correctly primes Point names if data value 0
- some fixes to pie charts
- fixed possible gpf on resize
- hard-coded maximum shape size, when based on point width.
Version 1.27 beta released 9 December 2003
        - Drill down & backup behavior improved
- More space allowed around vertical X-Axis labels
- Fixed funky bullet hole in pie slices > 99%
- Fixed Scatter graph template bug
- Fixed template bug : now Total/Average/Count applies to Queues &
          Hand-Coded Views
- Fixed pie shading regression
- Y-Axis displays correctly even if all sets are invisible
- Lines set as invisible are now correctly hidden
- Stacking of sets takes invisible sets into account
- Lines now behave better when mixed with bars
Version 1.26 beta released 20 November 2003
        - Corrected problem when saving to PNG's
- Added AddSpecialAxis method
- Scaling of fonts now takes note of client DPI windows settings
- Added Hi-Lo graph type
- Restored shading to Pie graph
- Corrected some mouse-over tips issues
Version 1.25 beta released 13 November 2003
        - fixed code in Reset method for separate Y-Axis settings
- Added RightBorder property to template
- Corrected Pie-Slice Shading
- removed extra line, and properly clipped, mousemove "tips"
- Added GetMousePos method
- Added MouseOver on line graphs
- Zoom method completed
- Fixed PrintPortrait property
Version 1.24 beta released 28 October 2003
        - Fixed GPF when drawing thick lines
- Added BackBorder and BackPicture properties
- Added PieLabelLineColor property
- Fixed Template bug with Variable Point Colors
- Renamed all VGrid properties to XGrid
- Renamed all HGrid properties to YGrid
- Added YAxisStep property. (Forces all Y-Axis labels to be a multiple
          of this value.) Set on the template on the Y-Axis tab.
- Added the AutoYGridTicks property. (Only applies if a YAxisStep is
          set. Only if not using separateYAxis. Determines the optimal values
          for YGridTicks). Set on the template on the Y-Axis tab.
- Added PrintPortrait property - forces the PrintGraph method to print
          the report in portrait mode.
- rewritten pie slice function
- pie labels try better not to be on top of each other. Especially
          very small slices in the top, left corner of the pie.
- re-instated longshade functionality
Version 1.22 beta released 1 September 2003
        - Corrected bar graphs when low value is zero
Version 1.21 beta released 29 August 2003
        - Optimized Y-Axis scaling to make graphs fill more space.
- Moved data labels on bars up a fraction to create more space around
          the number.
Version 1.20 beta released 28 August 2003
        - Fixed GPF in Local mode compiles
Version 1.19 beta released 20 August 2003
        - Moved setting of HeaderName property to the .Reset method so that
          variables in HeaderNames are applied.
- Moved setting of Y-Axis Min and Max values to the .Reset method for
          the same reason.
- Adjusted .SetSetYAxis so that if AutoScale is set to -1 then the
          parameter is ignored.
- If sets are cycled, then the SetQ is cleared when .Reset is called.
          Ideally thus, if CycleSets is offered, any handcode to change SetQ
          items should be coded in the .Reset method, after the Parent call.
- Fixed ShowXLabels property
- Added DLL attribute to class declarations. Conditional on _IGDLL_.
- Filled Line graphs are not moved to the front in the drawing
          sequence.
- Fixed GPF bug when drawing non-solid vertical tick lines
- Fixed GPF on resize.
- Improved Cylinder drawing
- Allowed for a small gap at the top if no header, if Y-Axis labels
          are on.
- Fixed crowding of X-Axis labels into left corner on Time graphs
Version 1.18 beta released 1 August 2003
        - fixed problem with ActiveInvisible graphs not drawing properly.
- added ActiveInvisible property to the template.
- fixed B&W legends when drawing triangles or squares.
- CycleSets now keeps cycling until it hits a visible set.
- Fixed, and documented, .SetSetYLabels method.
- X-Axis labels, when vertical, moved up slightly.
Version 1.17 beta released 30 July 2003
        - fixed problem when saving BMPs from after resizing workspace
- .GetPointSummary now excludes invisible sets by default (optionally
          included if .SumariseAllSets =1)
- .GetPointSummary applies the SetQ.DataLabelFormat
- fixed problem with CycleSets stutter
- .AddSetQ now adds in sorted order
- added more space around pie data labels
Version 1.16 beta released 28 July 2003
        - Changed drawing order of mixed graphs, so Lines draw last regardless
          of Set number
- Added "RainFall" procedure to example
- Extended Labels limit from 50 chars to 100 chars
- Corrected issues around plain 3D bars drawing in the wrong order.
- Squeezes more legends onto a single line 
- Added .GetPointSummary
          method
- Fixed problem with .GetPointName
Version 1.15 beta released 24 July 2003
        - fixed placement of data labels when some sets invisible
- fixed placement of data labels when mixing lines & bars
- fixed placement of sets when some sets are invisible, or lines.
Version 1.14 beta released 23 July 2003
        - Pareto X-Axis labels line up correctly
- More space put around axis labels, and the heading
- Correct resizing of fonts when more than 1 font is used on a graph
- Even more improvements to the font sizing and location
- Added .PaperZoom property - but only for testing purposes
- changed School example to use Tahoma as default font. Using MS Sans
          Serif is not good 'cause MS Sans Serif is not a True-Type font.
Version 1.13 beta released 16 July 2003
        - fixed template layout issue on Data tab
- fixed template error %DataSetName when adding new graphs
- fixed various problems with font size, and location.
- .SetStyle method
          documented
Version 1.12 beta released 8 July 2003
        - fixed problem where .ShowToPoint was not being reset correctly.
- added .MinPointWidth
          property
- fixed template layout issue on x-Axis and Y-Axis tabs
- invisible sets removed from the legend
- bars now don't take invisible sets into account when scaling
- diamond shape on legend fixed
- legend on bar graphs defaults to all square if shape:auto is set.
- fixed problem when all bars had negative values.
- fixed problem on line graphs where large numbers of points are
          drawn.
- fixed missing Y-Axis names
- Fixed problem when adding a graph to a graph that never had Insight
          before
 
Version 1.11 beta released 1 July 2003
        - Fixed problem with linewidth property on line graphs if Shapes are
          drawn.
- Changed prototype of .GetPoint, .GetPointName and .GetPointValue
          methods.
- Fixed .GetSetDescription returning the opposite boolean (caused
          problem with MouseOver)
- Fixed .SpreadXLabels property for Time graphs
- Fixed problems with Font settings on the template. 
- Moved all local font settings to the Fonts tab.
- Fixed Right-Click "Set Graph Type" if starting type is Pareto
Version 1.10 beta released 27 June 2003
        - Added a Scattergram example to the school.app example
- Added "SpreadXLabels" property
- Fixed problem with legend shapes
Version 1.09 beta released 26 June 2003
        - Fixed problem with fonts on machines that have ClearType turned on.
- Changed Scattergrams to allow multiple values per point.
Version 1.08 beta released 25 June 2003
        - Limited "Right-Click" / "Change Graph Type" functionality to graphs
          of the same functional type. ie Line/Bar/Pareto ; Pie ; Time / Gantt
- Optimized many internal loops, resulting in generally speedier
          performance
- Fixed problems with X-Axis on Time graphs
- Fixed problem with really really tiny pie slices
- Added .Visible property to .SetQ queue.
- Added .GetSet and .GetLabel methods. Deprecated .GetSetProp and
          .SetSetProp methods. Generally re-organized label drawing methods.
- Added .WorkSpaceWidth
          and .WorkSpaceHeight
          properties.
- Released C6 version
- Dropped 16 bit, and Clarion 4 support.
- Plus a whole bunch of other stuff, way too much to mention.
Version 1.00: Beta 7j released 22 November 2002
        - fixed micro-text appearing on some graphs
- added .Kill method call to report procedures. (NOTE : Hand-Coders
          & 3rd party report template users need to make sure this routine
          is called !!)
- fixed data labels missing from the very right of bar graphs
- added ActiveInvisible
          property
- fixed gpf for graphs on reports that were too small for the legend.
- fixed case where some text, using the "default" color doesn't
          display. Default color is now always black.
- fixed WriteToPNG functionality. Note that ZLIB.DLL is no long
          required. However if you want to be able to write PNG's then you must
          distribute LIBPNG.DLL (even if you compiled in Local mode)
- fixed gpf when the Clarion IDE closes after editing some graph
          properties.
Version 1.00: Beta 7i released 10 Sept 2002
        - Fixed problem drawing large first pie segment
- Added Embed point for adding Drawing commands
- Added PreDrawn procedure to ABC School example
- Fixed problem if 3D pie only contains 1 segment
- Fixed label-connector-line if pie only contains 1 segment.
- Set pie depth limit to 1/8th the horizontal diameter.
- Added .MaxPieRadius property
- Added .LegendText, .LegendValue, .LegendPercent properties for pie
          graphs
- fixed memory leak when printing a graph on a report
- optimized non-shaded graphs - now use 256 color BMPS.
- fixed problem of floating "0" data label on bar graphs
Version 1.00: Beta 7h released August 28 2002
        - Fixed pie labelling (again...) 
- Fixed Pie's sometimes exceeding their boundaries
- Fixed LegendAngle template bug
- Template generates into GreBar CrossTab procedures.
- Fixed report when printing the same graph on a report multiple times
- Fixed Right-Click, Print bug
- Added FillToZero property for Area-Line graphs (see Other Graphs,
          Stress Diagram in ABC example). 
- Added support for 5.5F (G&H) regression.
- Corrected property misnamed as ShowDataLabelEvery - should be
          ShowDataLabelsEvery
- Corrected drawing bugs in Pie graph.
- Corrected problem where very tiny bars not drawing correctly
- Added support for vertical data labels
- Added support for "drawing" on top of the graph
- Worked-around "view order" bug
Version 1.00: Beta 7g released
        - Fixed problem with Data labels
Version 1.00: Beta 7f released April 5 2002
        - Update Zlib.DLL in install to Zlib version 1.1.4
- Font properties - explicit Font:Regular supported.
- Thin black line on right and bottom of image removed.
- Fixed problem when running app multiple times over a network.
- Added switch to Advanced tab to override Reset when Window resets.
- Added .BorderColor property. Set to the same color as the Box on
          reports.
- Corrected Gantt Y-Axis labeling issues.
- Made more space for last label on Line, Time and Gantt charts.
Version 1.00: Beta 7e released 15 March 2002
        - Fixed problem with Pie Legend when graph redrawn.
- Vertical text - color:none equated to color:black to be consistent.
- Updated X-Axis tab to include Font Angle, Font Justify and X-Axis
          position.
- Updated Y-Axis tab to include Font Angle, Font Justify and Y-Axis
          Position.
- Much improved resolution on printed reports
- Should take care of the "disappearing Y-Axis" bug
- Added .RightBorder property
- Fixed color-shifting in SaveAs PNG format.
- Added support for saving very big PNG pictures.
Version 1.00: Beta 7d released 11 March 2002
        - Included update TEX dll's. (not needed for distribution.)
- Removed 'stop' in the graph draw method.
- Completed support for new Y-Axis Scaling options in the template.
- turned the "back shading" of the graph area back on.
Version 1.00: Beta 7c released 8 March 2002
        - Fixed regression in .PrintGraph method
- Added new .SaveAs
          method. (Note support for WMF's removed for now. Support for BMP and
          PNG added)
- Updated template with new Y-Axis scaling options. Basically finer
          control over the auto-scaling.
- Fixed problem where X-Axis names were being truncated.
- Documented changes needed to reports. (see the Upgrading
            from Beta 6 section.)
- Changed Previewer so that it's more obvious how to run it.
Version 1.00: Beta 7a released 21 Feb 2002
        - Fixed Resizing regression by adding new .Resize
          method
- Minor improvements to ISGPreview
Version 1.00: Beta 7 released 20 Feb 2002
        - Major changes to underlying engine, including;
- Implementation of "draw" engine
- Implementation of vertically orientated text
- Improvements to Pie labelling
- Improved auto-scaling
- New "real-time" previewer
- Improved Legends
- Improved support for changing of properties at runtime
Version 1.00: Beta 6b Unreleased
        - Fixed translations in Legacy apps
- Made BINDing a bit Smarter when dealing with Local Data
Version 1.00: Beta 6a Released March 12 2001
        - Fixed "Unknown variable %Something" errors.
- Fixed "Data Labels Every x points" feature.
- Fixed fixed-range Y-Axis numbers
- Fixed multi-set override Y-Axis scaling
- Low-Level Y-Axis tab moved slightly (tab-order) to be more
          consistent.
- Clarified Y-Axis override settings.
Version 1.00: Beta 6 Released March 9 20
        - Legends added
- Added Busy Window to PrintGraph method.
- Added SuppressBusyWindows property (to suppress above feature).
- Added DeleteItem method
- Fixed Labels in sorted data sets
- Tweaked position of topmost Y-Axis label
Version 1.00: Beta 5b Private-Released 22 February 2001
        - Fixed : Line Graph problem with wide lines & multiple sets
- Fixed : Font problem on Pareto Graphs
- Fixed : Problem when using Prop:Sql
- Fixed : Dialog corruption when using "Totalling" of fields.
- Fixed : Default for Global Grid "Quantities".
- Reverted : Right-Click, Print, back to Beta 4 behaviour. i.e.
          Scaling disabled.
- Corrected : Temperatures example.
- Added correction factor if DataLabels are turned on, and AutoScaling
          is on, to make space at the top.
- Data Labeling on Bar Graphs tweaked.
Version 1.00: Beta 5a Released 8 January 2001
        - Fixed regression on Preview window.
- Fixed Y-Scaling issues.
Version 1.00: Beta 5 Released 5 January 2001
        - Added support for non-Z-Clustering. i.e. bars that are clustered
          side-by-side rather than behind each other. See here.
- Added support for Stacking. i.e. bars that are stacked one on top of
          the other to form a long bar. 
- Added support to graph from a hand-coded View. 
- Added Prop:SQL support for the View. (Generated Views and Hand-Coded
          Views.) 
- Added support for "Short Labels". If this is on (for Y-Axis or Data
          Labels) then you can shorten labels to only a few significant digits.
          For example replace 55634 with 55K or just 55. 
- Added start of Language Translation Support. See here.
- Added 3 new Data Styles (10, 11 and 12) which are gray-scale in
          nature.
- Added parameters to the PrintGraph method to allow scaling.
- Added SetReportProperties method for fine "printing" control.
- The Preview screen has been enhanced (Global
            Extension). The idea is (in the next release) to move the
          settings from the Preview back into the template.
- Completed support for Variable Numbers of Sets. See Advanced
            : Using a Variable Number of Sets.
- Fixed : Template incompatibility between Clarion 4 and Clarion 5.5.
          "%GlobalData"
- Fixed : Variable-Sets support where the number of sets is a single
          variable.
- Fixed : Variable-Set support where the data is "out of order".
- Fixed : "End" not generated if "SetType" option turned off.
Version 1.00: Beta 4e Released 26 October 2000
        - Changed generated variables from ID and SET to GraphID and GraphSet
          in order to be a bit more unique (i.e. less chance of clashing with
          existing global variables.)
- Removed debug code that dramatically slowed down drawing speed in
          4d.
- Fixed Data Labels which mysteriously disappeared...
- Fixed problem in Clarion 4 of "%GlobalDataLevel unknown"
Version 1.00: Beta 4d Released 23 October 2000
        - Fixed problem displaying multiple labels on Y-Axis
- Fixed bug when drawing Pie graphs from memory variables.
- Changed Time/Date handling to support full date/time picture range.
Version 1.00: Beta 4b Released 19 October 2000
        - Fixed "Unknown variable %ConditionalPointOverridesText"
Version 1.00: Beta 4b Released 17 October 2000
        - Fixed preview problem.
- Fixed : Pareto graph in example caused compile errors
- Fixed Mouse Move on Pareto
- Fixed Graph hanging if data set empty and Auto-Scale on.
- Fixed data labels on Pareto
- Added Gantt Charts
- Added Time (Line) graphs
- Fixed problem of graph not displaying the first time
- Actually Turned on feature "Fixed number of X-Axis labels".
- Added Blank to clear old graphs when window sizing.
Version 1.00: Beta 4 Released 14 October 2000
        - Added Filters when graphing from a Queue
- Added a Queue Sort facility (leaves the Queue sorted though)
- Fixed ability to set Y-Axis ranges, even if labels suppressed.
- Added ability to graph from directly memory variables (arrays not
          yet supported...)
- Improved support for CPCS (fixes BindFileFields bug)
- Some optimizations for graphs with large numbers of points.
- Fixed bug with secondary files with more than 1 related field.
- Got rid of pesky "Unknown %GraphOptions" in Clarion 5.5
- Added Point level filters.
- Added VGrid Ticks & HGrid Ticks support...
- Fixed Related File Filter bug
- Fixed really obscure problem with BIND and dictionary global Queues.
- Added support for a fixed number of X-Axis Labels
- Added Y-Axis format to Tip value.
- Added support for additional sort fields for the View (Key now
          Optional)
- Fixed problem with Conditional Colors being applied to all Sets
- Added Pareto Graph Type
- Improved drawing accuracy (Elliptical bar tops especially)
- Fixed inner-ring color problem with Donut graphs
- Added Graph Gallery section to the docs
Version 1.00: Beta 3b Released 20 September 2000
        - Added ability to set point, and set, colors based on an expression.
- Fixed bug on the Graph Heading Font window (unknown %FontSize).
- Hopefully fixed problem occurring on some machines 'Unknown
          %everything'
- Added point-coloring-override features to Pie Graphs
- Added ability to make the override-point-colors an expression (i.e.
          not a fixed value)
- Fixed problem on Win 2000 and Win NT SP 6 where shading not working.
- Added Inner Radius setting to Pie Graphs (i.e. Donut Graphs)
- Fixed incorrect Global 'Back Shading' template code.
- Fixed 32 bit local compiles under Clarion 5.5
Version 1.00: Beta 3a Released 15 September 2000
        - Fixed a problem with the Clarion 5 install which had some incorrect
          LIB files.
Version 1.00: Beta 3 Released 14 September 2000
        - Added support for fonts to be added to the list (see Adding
            Fonts)
- Added support for adding single variables to the graph data
- Report Control : Default Size adjusted to cope with reports set in
          THOUS.
- Added support for multiple graphs on the same detail.
- Fixed problem with multiple graphs set to print at the beginning of
          the report.
- 'Other' positioning now fully supports normal Detail filter.
- New embeds added to the Print Routines
- Print Routine (in reports) now split into Draw Routine and Print
          Routine.
- Support added to "Mouse move over graph" functionality to allow
          values to be displayed in the Tip. (Note Not recommended for Versions
          of Clarion prior to 5b).
- Added support for rotating sets on the mouse right-click.
- Added Graph Header feature (see Global Options, and Control
            Template Options)
- Fixed problem with X-Axis labels 'skipping'
- Fixed rounding problem on Y-Axis labels
- Added support for Formatting Y-Axis and Data Labels (see Options
            for the Control template)
- Broke the base class into a number of classes to support 16 bit (and
          the IDE Preview). 16 bit is not part of this release but may well be
          included in future releases.
- Added support for the ClarioNet 3rd party product. (see www.ClarioNet.com)
- Added support for Floating Bars (see Options
            for the Control template)
- Added support for Color Overriding of individual points on the
          graph. (see Options
            for the Control template)
- Added support for Top-Shading, Top & Right Shading (not
          available in C4) and Long Shading. (see Options
            for the Control template)
- Added the Browse Temperatures to the example to show the different
          shading.
- Added ability to switch off background shading either globally or
          locally.
Version 1.00: Beta 2b Released 8 August 2000
        - Fixed Mouse support in Legacy apps
- Fixed Mouse support in Clarion 5.5 (and 5.0?) apps
- Fixed Maximize-then-restore leaving errant drawings behind
- Added AutoShade support (only kicks in in 16 bit color mode or
          higher) (not in previewer yet)
- Fixed "Unknown variable %ChartDepth" error.
- Added more axis types (21 through 28) but not in preview yet
- Fixed Template Registration in Clarion 5.5.
Version 1.00: Beta 2 Released 3 August 2000
        - Added support for CPCS UnivABCReport data declarations.
- Added support for MouseOver on a graph including showing point
          information on the caption, status bar, and in fields.
- Added support for MouseClick events on a graph, including Print,
          Save As, Drill Down, Back Up, Zoom In, Zoom Out and Select Graph Type.
          See new section in docs Making the Graph
            Interactive.
- Fixed labelling bug on Pie charts
- Fixed problem where Y-axis sometimes spontaneously auto-scaled.
- Added support for variable Set numbers. See new section in docs Using a Variable Number of Sets. [not
          working yet]
- "Other" Tab removed from extension template.
- Bug fixed where 'Range of Values' was being ignored.
- Added ability to Sum, Average and Count records even if they are not
          ordered in Set / Point sequence.
- Multi-DLL support Ok.
Version 1.00: Beta 1c Released 21 July 2000
        - Added support for embedding in the ValidateRecord, SetRecord,
          SetPointName, and SetPointNumber methods.
- Added Background section to docs.
- Extended the FAQ and Tips for the docs 
- Added Distribution section to doc
- Other general doc updates.
- Fixed bug handling Groups in File structures
- Fixed a problem where X-Axis, and Y-Axis, Labels refused to display
- Added ValidateRecord method to the template
- Fixed Y-Axis override settings
- Support for Queues back in
- Added support to automatically Bind Range & Filter variables
Version 1.00: Beta 1b Released 14 July 2000
        - Fixed (hopefully) "%DataSetDescription has no Instance" 
-  Fixed "Unknown variable %DefaultObjectName" 
-  Fixed problem where "Cancel" trashed graph point settings. 
- TEMPORARILY REMOVED : Graphing from Queues won't work. (Back in Beta
          1c) 
Version 1.00: Beta 1a Released 13 July 2000
        - Adjusted minor template layout bug. 
-  Fixed a variety of Install Bugs - including missing files 
-  Extended ABC example a bit 
-  Shortened Graphic names to 8 chars to support Win NT 
Version 1.00: Beta 1 Released 10 July 2000