**********************************************
*  TXYSystem component 1.3 for Delphi 2 & 3  *
*  Developed by Giuseppe Lo Presti           *
**********************************************

Installation & use
===================
TXYSystem is a descendant of TPaintBox and is developed for any math/graphical application: it simplifies some tasks as drawing on a floating-point coordinate system, plotting graph functions, handling aspect ratio, and so on. For any transformation, there are some functions which allows you to switch from screen integer coordinate system to "user" real coordinate system.
The component can be installed as any standard Delphi components; at the end of installation, you find it in "Math" page of the component palette.
Moreover, stream support is now included with Load & Store methods (see the interface file xysys.int.txt for details).
These are all new properties and methods:

* Properties:
About         an about dialog.
AxesColor     x,y axes color.
GridColor     the grid color.
Decimals      decimal digits for axes numbers.
DrawFuncStep  step (pixels) used by DrawFunc method (see below).
PointSize     size (pixels) of points drawn by DrawPoint method.
PointStyle    style of points; the available style are o, +, x.
AspectRatio   read-only: return aspect ratio, defined as:
              pixels per y unit / pixels per x unit.
Options       a set of 4 flags:
 - xyTransparent  the paint box will not be cleared.
 - xyAxes         draws the x,y axes.
 - xyGrid         draws the grid.
 - xyKeepRatio    forces AspectRatio to 1 when width/height or x/y limits changes; see KRPriority.
KRPriority    used for Keep Ratio behaviour:
 - krNone         equivalent to xyKeepRatio = false
 - krChangeX      when you change height or y limits properties, width or x limits properties also change in order to have AspectRatio = 1.
 - krChangeY      as above, except that now height or y limits properties change.

* Coordinate properties - set these properties to define user coordinate system limits and units:
Xmin, Xmax    x limits.
Ymin, Ymax    y limits.
UprX, UprY    primary units, used for numbers and grid.
UsecX, UsecY  secondary units, used for other ticks; but if Upr = 0, grid will be drawn using Usec.
Ox, Oy        read-only: gets the screen coordinates for user origin point.
Note that when xyKeepRatio = true, any change to a coordinate property may also affect others.

* Transformation functions:
you can use scrX, scrY to obtain screen coordinates, and usrX, usrY to obtain user coordinates, according to all coordinate properties. See also XYSys.int.txt for further details.

* Graph methods:
At the moment, there are five specific methods; you can use also all Canvas methods, of course.
RedrawAxes              draws x & y axes according to current settings.
DrawLine(a, b, c)       draws the equation ax + by + c = 0.
DrawPoint(x, y)         draws a real coordinate point as a filled circle, a rect crux or a cross according to PointStyle property; the size is determined by PointSize property.
DrawFunc(f, a, b)       draws a math function f(x) (type TFunc) from a to b using DrawFuncStep as pixel increment on the x axis; if DrawFuncStep is higher, the plot is faster but also has less quality.
Vector(x1, y1, x2, y2)  draws an oriented segment to x2, y2 according to thencurrent Pen.width (the arrow size is proportional to Pen.width).

Demo
=====
The Demo included in this package is a standard Delphi 2.0 project. In order to compile and run it you must have installed the TAsyncTimer component, which can be found on DSP.

Author, distribution policy, etc.
==================================
This unregistered version is full-functional but without source code; you can use it only in your freeware application: if you want to develope a professional application you must contact me (see later) for registering.
Registered version includes full source and e-mail support; there is no register fee (I'm a student, not a professional programmer), but I would be considered as a registered user of a components of yours; so send me a component of yours (with source code) and I send you this source (of course via email).
For any suggestions, bugs and others, send an email to the address below:
lopresti@unipa.it
