Version History Download latest version
here
 
	Version 3.30 (12 July 2012)
	
		- Template rework of Object and Export generation.
Version 3.26 (24 May 2012)
	
		- Fix: (regression) Errors caused by DrawHeader fixed.
Version 3.25 (23 May 2012)
	
		- Fix: All methods exported from Data DLL.
Version 3.23 (12 April 2012)
	
		- Fix: Polygon, FillPolygon methods. Handle case where ymin = 0 and no 
		edges with y > 0.
Version 3.22 (14 December 2011)
	
		- Required for Insight Graphing 2
- Added: Length3d method 
		returns the length of the vector in 3D space.
- Added: Normalize method 
		normalizes the passed Vector. 
 
	 
	Version 3.21 (24 October 2011)
	
		- Required for Insight Graphing 2
- Fixed: MouseX and
		MouseY methods returning values offset up to the width 
		of the scroll bar when the Draw canvas was larger than the control and a 
		scroll bar was used in only one direction (either horizontal or 
		vertical, but not both) and the scroll bar was used to change the 
		position within the control (at full scroll the mouse coordinate would 
		be offset by the width of the scrollbar which was not present).
- Added: MultiMonitors 
		example application. Demonstrates listing all monitors, position a 
		window on the primary display, opening a window on a new thread on the 
		secondary display and setting it to full screen, and fullscreen 
		animation and color calculation using Draw.
- Added: Fullscreen 
		method which retrieves the monitor info for the screen that the window 
		is currently on and resizes the window to the full size of the screen. 
		See the "GoFullscreen" example application, which demonstrates creating 
		full screen Draw applications without title bars window borders etc.
- Added: GoFullscreen example application 
		(Clarion 6) which demonstrates creating fullscreen applications. Note 
		that the code used in the example is included in the
		"HowTo" section of the 
		documentation.
- Added: Multiple Monitors section to the
		"HowTo" section of the 
		documentation.
- Added: LoadUser32 method loads all 
		runtime loaded API functions required from User32.dll. This is called 
		automatically the first time a method which requires the functionality 
		is called.
- Added: ListMonitors 
		method lists all monitors on the system
- Renamed: EnumFonts to
		EnumFontFamilies
- Fixed: Font enumeration was causing a 
		GPF
- Added: Font enumeration to the Demo 
		example
- Added: DRAW_DISPLAY_DEVICE type
- Added: DRAW_MONITORINFO type
- Added: DRAW_DEVMODE type
- Added: ListDisplayDevices 
		methods lists all display devices
 
	 
	Version 3.20 (16 September 2011)
	
		- Required for Insight Graphing 2
- Fixed: Max method 
		returning the minimum value rather than maximum when three or more 
		parameters where passed.
- Updated: Validated the behavior of the
		Min method.
- Fixed: RgbToHsv 
		treating certain colors as grey, resulting in incorrect conversion
- Fixed: LightenColor not 
		correctly lightening the color
- Fixed: Missing value clipping in 
		LightenColor and DarkenColor
- Added: DarkenColor now 
		supports both absolute and relative adjustments
- Added: LightenColor now 
		supports both absolute and relative adjustments
- Added: LightenColor now 
		does perceptual lightening rather than simply adjusting the HSV Value of 
		the color - the saturation is proportionally adjusted for colors with a 
		maximum lightness, resulting in the method behaving perceptually as 
		expected.
- Updated: Saturate 
		method calculation
- Updated: Desaturate 
		method calculation
- Fixed: aaArc 
		Anti-Aliased Arcs drawing with a "width" and "height" up to 1 pixels 
		less than the correct sizes.
- Added: aaArc 
		automatically falls back to the pen color if not explicit color is 
		specified, and draws nothing if no color is passed and the pen color is 
		COLOR:None.
- Added: aaArc returns 
		without drawing anything if the penWidth is zero.
- Added: PieSlice, aaPieSlice, 
		aaChord, aaBezier, and aaRoundRect  now 
		do not draw anything if a line only pie slice is specified and the pen 
		width is set to zero (0).
- Added: _LineColor 
		internal method.
- Removed: Deprecated WuLine 
		method.
- Added: _PieLine method - draws a line only pie slice.
- Added: _ArcCheck
- Added: _ChordCalc
- Added: DrawChordCalc 
		type
- Updated: Refactored _mArc
- Updated: Refactored _mThickArc
- Updated: Refactored PieSlice
- Updated: Refactored ShadeArcBand
- Updated: Ellipse and Arc parameter handling and coordinate 
		normalization.
- Added: _PieCalcLines 
		for calculating arc radials
- Added: aaShadeLine
- Fixed: PieSlice not 
		supporting startRadius when the width and height of the base ellipse 
		were the same (slice out of a circle).
- Fixed: Arcs drawing based on an ellipse 
		that could be 1 pixels too wide and high (only affected non anti-aliased 
		arcs).
- Fixed: Ellipses and thick ellipses 
		drawing up to 1 pixel too wide or high (did not affect anti-aliased 
		ellipses)
- Removed: Deprecated OldGrabScreen method
- Added: Improve PieSlice 
		drawing
- Removed: endRadius from PieSlice 
		drawing
- Added: _LineColor
- Added: _PieBorder. 
		Draws the pie slice outline - can be used to draw line only pies, used 
		internally for pie slice anti-aliasing, and can draw line on pie slices 
		with shaded lines.
- Added: PieResetSlice
- Added: new aaPie method 
		that takes a PieSliceType parameter
- Added: aaArc method now 
		allows the start and end point values for the arc to the returned using 
		the pStart and pEnd parameters
- Updated: Refactored aaArc 
		to improve performance and reduce code and duplication (halved the 
		number of if statements per pixel executed)
- Updated: Improved aaArc 
		end point pixel accuracy
- Updated: Improved performances of
		aaPie and aaShadeArcBand methods.
- Updated: Improved the drawing of pie 
		slices
- Added: LengthenLine 
		which takes a width and height for a line and increments them by the 
		passed amount while maintaining the line gradient and orientation (the 
		line is lengthened).
- Added: Inc method 
		increments the absolute value of the passed number by the passed amount 
		(increment if the number is positive, decrement if it is negative)
- Fixed: Cylinder method 
		drawing cylinder ends 1 pixels too large.
- Added: Partial support for cylinder 
		anti-aliasing (the bottom edge is not anti-aliased in this release.
- Added: _ArcFill method draws an arc and fills the 
		additional pixels (much like anti-aliasing but at full strength) to 
		create a 2 pixel wide arc.
- Added: ColorPos method 
		returns the color at a point in a given color range. The color range (or 
		gradient) is based on a start color, end color and the distance between 
		them. 
- Updated: ColorRange 
		method refactored 
- Added: "ColorHandling" example 
		application uses the new ColorPos method to create a "palette" of colors 
		using four base colors. Requires CapeSoft StringTheory.
 
	 
	Version 3.11 (28 July 2011)
	
		- Fixed: Typo in the Draw.inc on the
		_AddLayerOrder method (resulting in an unresolved for 
		export error in multi-DLL applications). 
 
	 
	Version 3.10 (28 July 2011)
	
		- Fixed: 
		Display method was 
		using the maxLayer property rather than numLayers when looping through 
		the layerOrder. This was causing a reduction in display performance. 
		Optimized multi layer display performance.
- Fixed/Changed: Rewrote the 
		InitLayer method to 
		improve performance and eliminate issues with duplicate entries in the 
		layerOrder array which would degrade display performance over time when 
		using multiple layer.
- Added: _AddLayerOrder 
		method which adds a new layer to the layerOrder array. This method is 
		internal and is not expected to be called directly.
- Deprecated: The maxLayer property has 
		been deprecated and removed.
- Added: Documented the 
		SetDisplayArea 
		method.
- Added: Document the 
		ResetDisplayArea 
		method.
 
	Version 3.09 (21 July 2011)
	
		- Fixed: Typo on the export name for the
		Captcha method (was being exported as Capatcha). This 
		has no impact on application using Draw.
- Fixed: The ErrorTrap 
		method being called when diReadImageToBuffer was called 
		with a buffer that was intentionally too small (the method returns the 
		required size).
- Added: handling for invalid 
		layerOrder array values to prevent a potential GPF.
- Added: diWriteImage 
		method for saving the image in almost two different file formats 
		including JPEG, PNG, TIFF, BMP, ICO, PBM, Targa, JPEG2000 etc.
- Fixed:  bug with the 
		layerOrder array that caused duplicate layer entries when
		KillLayer and InitLayer were called 
		multiple times for the same layer. This could result in a GPF or reduced 
		display performance.
- Added: New menu system to the 
		documentation, cleaned up links and added missing items to the menu.
- Updated: The DrawImage documentation. 
		This is still a work in progress, see the DrawImage example application 
		for an example of using DrawImage.
- New: Added an example of the new diWriteImage to the DrawImage 
		example.
 
	 
	Version 3.08 (12 July 2011)
	
		- Fixed: Typo in the template causing an 
		unresolved external in multi-dll applications on the LinearEllipse 
		method.
- Fixed: The MouseX and 
		MouseY methods not 
		correctly restoring the PROP:pixels setting for the window when 
		PROP:Thous was non zero (restoring PROP:Thous to a non zero value clears 
		PROP:Pixels).
 
	 
	Version 3.07 (11 July 2011)
	
		- Updated: All examples applications have 
		been updated and tested, including migrating older examples from Clarion 
		5.0 to Clarion 5.5. Removed all old examples which were extraneous, 
		removed duplicate or deprecated files from examples, added manifests for 
		all examples, correct missing templates or compile errors etc.
- Fixed: Ellipse drawing off by one pixel 
		when the width or height were passed as negative values.
- Fixed: Shaded ellipses not drawing 
		correctly with vertical shading.
- Fixed: ShadeLine method not drawing 
		vertically shaded lines correctly.
- Added: _NormCoords method to provide 
		consistent coordinate normalization
- Added: _ClipCoords to provided 
		consistent coordinate clipping
- Fixed: Clipping of coordinates was 
		allowing (0, 0) rather than treating (1, 1) as the origin
- Fixed: Clipping or coordinates allowing 
		coordinates ending 1 pixel off the canvas
- Updated: Improved clipping and 
		normalization of coordinates for patterned lines.
- Fixed: Additional pixel drawing on 
		shaded vertical lines.
- Fixed: Shaded ellipses could draw the 
		left hand side of the ellipse with a radius 1 pixel greater than the 
		right hand side depending on the size and coordinates.
- Updated: Validated styled lines drawing 
		coordinates.
- Updated: Refactoring clipping and 
		normalization code for shaded and styled lines
- Fixed: Horizontal shaded lines filling 1 
		additional pixel.
- Fixed: Shaded vertical lines not shading 
		(drawing as a solid color).
- Updated: Optimized and refactored 
		_ErrLine 
		method, removed extraneous code
- Added: New AntiAlias example 
		demonstrates the new Anti Aliasing support in Draw.
- Updated: Removed additional extraneous 
		files from examples and reduced installer size.
- Updated: Modified the Chord method to 
		call Arc and removed duplicate extraneous code.
- Updated: Removed deprecated/unused 
		_NewThickLine 
		method
- Updated: Removed deprecated/unused 
		_Thickness method
- Updated: Internal LinearEllipse method 
		renamed to _LinearEllipse
- Fixed: MetallicCylinder not drawing the 
		cylinder body with certain coordinates as the result of overly 
		aggressive clipping.
- Updated: Removed the deprecated/unused 
		Thick_line method.
- Fixed: Anti-Aliased ellipses drawing 
		width incorrect coordinates (only affected the Ellipse method not direct 
		calls to aaEllipse).
- Added: Anti-Aliasing to the Demo example 
		application
- Updated: The code for the demo example 
		to better demonstrate basic drawing.
- Added: Examples of clipping coordinates 
		to the Demo example
- Added: A RandCoords routine to the Demo 
		example that demonstrates generating coordinates within an area and 
		clipping the result.
- Fixed: Removed extraneous debug logging.
- Added: New RandColor method that allows 
		the lightness and saturation of the color being generated to be 
		manipulated, as well as the amount of variance in the lightness of the 
		color to be influenced.
- Added: Example of using the new 
		RandColor method to the Demo example (see the Sphere drawing example).
- Updated: Removed the local RandColor 
		function from the example application and moved all calls to the 
		Draw.RandColor method.
- Added: Anti-Aliases edges to the Sphere 
		method. Now supports smooth edge drawing when Anti-Aliasing is enabled 
		(the Draw.antiAlias property is non zero)
- Fixed: Spheres potentially drawing 1 
		pixel too wide for some coordinates.
- Fixed: Icons drawing 1 pixels offset 
		from the correct location.
- Fixed: Icons clipping the icon width by 
		1 pixel too many when the entire icon was not on the canvas and hence 
		required clipping.
- Fixed: Icons drawing incorrectly when 
		clipped as a result of the source icon scanline not be adjusted for each 
		row of pixels in the icon, resulting in the next scanline beginning at 
		the clipping position rather than the start of the next scanline in the 
		icon (which resulted in a corrupted "skew" drawing of the icon).
- Updated: Verified icon clipped and 
		coordinate adjusted for all coordinate cases.
- Updated: Optimize icon drawing to not 
		process extraneous scanlines that would draw off the canvas.
- Added: New "Tests" tab to the main 
		example. This demonstrates some additional method calls and also tests 
		some of the Draw functionality.
 
	 
	Version 3.06 (28 
June 2011)
	
		- Fixed: A potential array index out of 
		bounds when using 256 color drawing in the Display method (the palette 
		could end up with 257 entries rather than 256).
- Fixed: Duplicate symbol compile errors 
		in Clarion 8 on the LibPNG functions.
 
 
	Version 3.05 (6 
June 2011)
	
		- Fixed: Fix the template generating the Init call twice for reports.
- Fixed: The template not generating the call to InitDrawImage on 
		reports.
 
	Version 3.03 (25
	February 2011)
	
		- DrawPaint - use only textvalue (for images as well). Deprecated 
		ItemQ.ImageName property. If you get compile errors, use the 
		ItemQ.textvalue property.
- Fix for RightReports - resizing fix. Don't resize < 0 (vertically or 
		horizontally)
Version 3.02 (16 August 2010)
	
		- Fixed missing Thick_Line in the export list, 
		which would result in an Unresolved External error in multi-dll 
		applications.
Version 3.01 (10 August 2010)
	
		- Fixed incorrect name() attribute for the 
		aaPolygon method.
- Removed the old 
		HLINE@F4DRAW from the template exports.
- Fixed release date for 3.00 in the History.
 
Version 3.00 (4 August 2010)
	
		- Changed the open mode used by the Image() method 
		to open loaded images are read-only. This allows images to be read and 
		displayed from locations that do not have write access.
- Added code to load WMF and EMF files (in 
		progress)
- Fixed: GetDisplay() method was not always 
		calculating zero padding correctly.
- Improved performance of horizontal and vertical 
		lines that use line styles.
- Fixed lines drawing 1 pixel offset from the 
		correct location.
- The Arc method now allows 
		negative widths and heights
- Added anti-aliasing support (provides smooth 
		edges for objects being drawn).
- Added .antiAlias 
		property, when set to True, this will draw anti-aliased versions of 
		objects where available.
			- Added aaPolyline 
			method
- Added aaRoundRect method
- Added aaBezier method
- Added the following internal methods 
			(typically the .antiAlias property would be set to True, and these 
			would be called automatically):
				- Added aaLine method
- Added aaEllipse method
- Added aaPolygon method
- Added WuLine method
- Added aaArc method
- Added aaChord method
 
 
- Refactored code for clipping and coordinate 
		calculation across all line methods
- Fixed various offset isses, where shapes were 
		drawing offset by a single pixel.
- Fixed 45 degree lines drawing an extra pixel on 
		one end in some cases.
- Added Dist method for returning 
		the distance from one pixel coordinate to another.
- Added the Pos method to return 
		the pixel position when given a pixel coordinate and a distance.
- Added a ConstrainCoords method 
		that provides clipping and coordinate transformation.
- Corrected Polygon outlines, which could drawn 1 
		pixel short.
- Added anti-aliasing support to the standard 
		methods when the .antiAlias property is set to 
		True.
- Added a new AntiAlias example showing 
		anti-aliases object drawing.
- New thick line drawing algorithm provides improved 
		accuracy and initial anti-aliasing support (the algorithm for 
		anti-aliasing thick lines will be improved in future releases).
- Fixed lines potentially missing a pixel in their 
		center at specific angles and lengths.
 
Version 2.82 (30 December 2009)
	
		- Fixed Unresolved External on _StringHeight when 
		compiling in multi DLL mode in Clarion 7.1.
 
Version 2.81 (21 December 2009)
	
		- Corrected external name for _StringHeight method, 
		detected by linker in C71.
- Corrected indentation and quotes for Draw-Paint, 
		Multi-Proj, Embedded cursors support.
Version 2.80 (29 October 2009)
	
		- Fixed: diReadImage was not displaying images that were loaded from 
		BLOBs as a result of a regression in 2.78 when image caching was added.
- DrawHeader:
			- New: ChangeIcon() method allows the icon to be changed at 
			runtime.
- New: .resizePercentage property allows the resize width of the 
			bar to be adjusted. By default this is 100, which creates a bar 
			twice as wide as the current width of the window, allowing the 
			window size to be increased without having to redraw the bar 
			frequently. Setting this to 0 always draws the bar the same width as 
			the window, and values in between allow a balance between 
			performance and appearance. We don't recommend values above 100, 
			although there is no limit on the value.
- Improved: Support for 16x16 icons on smaller header bars. 
- New: Support for Mike Hanson's resizing template.
 
 
Version 2.79 (16 September 2009)
	
		- Fixed: DrawHeader: Template barheight now defaults to 5 in the 
		template settings
- Fixed: DrawHeader: If the barheight field is blank, then no code is 
		generated to override the barheight and the object's default height is 
		used.
- Updated: DrawPaint class to provide additional functionality for 
		RightReports
 
	Version 2.78 (27 August 2009)
	
		- Fixed: Exports for Multi-DLL applications. Fixes "unresolved 
		external" errors.
- Added: diImageFromCache method to load an image cached by the call 
		to diReadImage.
- Added: Enhanced functionality to diReadImage to support caching of 
		images. Images are cached by default, unless the cache parameter is 
		passed as 0.
- Added: draw:CacheBufferType data type to hold cached images.
- Improved: Clipping support for redrawing a specific area of the 
		canvas (dramatically improves performance with animation and other 
		frequent updates, where only a small area has changed):
			-  clipRectX long
- clipRectY long
- clipRectW long
- clipRectH long
- clipRect long
 
- Added: Cache group to store use to cached images for rapid redrawing 
		and reuse. Uses the draw:CacheBufferType group type to store each cached 
		image. The maximum number of cached images is determined by the 
		draw:MAXCACHE equate, which is 1000 by default.
 
 
	Version 2.77 (14 July 2009)
	
		- Fixed: The Polygon method was ignoring the numVertices parameter for 
		line only polygons.
- Fixed: The Polygon method not supporting thick line widths for 
		borders.
- Fixed: Thick line drawing was not always drawing the line widths 
		correctly.
 
	Version 2.76 (15 May 2009)
	
		- Added: diReadImage now supports loading images directly from BLOBs.
- Added: Updated documentation, dynamic syntax highlight for code 
		blocks, begun the documentation of the DrawImage methods.
 
	Version 2.75 (6 May 2009)
	
		- Fixed: DrawHeader template was not setting the bottom bar width.
- Fixed: DrawHeader template was ignoring the bottom bar shading if 
		set to color:none
- Added: a DrawHeader.blurBar property that when set allows the bottom 
		bar to be faded into the background along it's top edge. This was the 
		default behaviour with previous version, however the new default is to 
		draw the bar normally without any fading or shading into the background 
		along its top edge.
- Added embeds to the DrawHeader initialisation for the Legacy 
		template change, to allow the settings to be overridden (this 
		functionality already exists in the ABC template chain).
- Added: New Documentation for DrawImage
- Added: New "HowTo Guides" document (currently a place 
		holder for 
- Added: New menu navigation system for the documentation
- Fixed numerous small errors in the documentation, expanded the 
		documentation throughout.
- Added: Support for EasyResizeAndSplit with the Draw Headings 
		template.
 
	Version 2.74 
	(03 December 2008)
	
		- Added Inited property. Is set in the init method, and kill is only 
		completed if the inited property is set (reset in kill method).
Version 2.73 
	(01 December 2008)
	
		- Fixed: DrawPaint disposal and cleanup, fixes the RightReports editor 
		leaking memory when closed.
- Added: Small Clarion 7 template update.
 
	Version 2.72 
	(10 November 2008)
	
		- Clarion 7 compatible install.
 
	Version 2.71 
	(13 October 2008)
	
		- Fixed: Potential GPF in the Draw.Init() method because of invalid 
		handling of an API return value. This was causing SendTo to GPF when 
		using certain types of icons under Windows XP (Windows Vista was not 
		affected).
 
	Version 2.70 (12 September 2008)
	
		- Added: DrawPaint:
		The user can now 
		resize and object using any edge of the bounding box.
- Added: New resizing cursors for the above.
- Added: Additional bounds check in LoadIcon 
		for icons that had invalid header information, that could potentially 
		cause a GPF.
- Fixed: Error in LoadIcon where the allocated buffer was one byte 
		smaller than it should have been, causing a potential buffer overflow 
		with paletted (8 bit) icons where the AND mask of the icon had been 
		padded onto a DWORD boundary.
 
	Version 2.69 (30 August 2008)
  - Fixed: Draw of layers with alpha transparency, where the layer was smaller 
	than the canvas (baseLayer) and was position away from the origin. Layers 
	with alpha blending were drawing with the y-coordinate inverted. This same 
	issue also affected any layer copy done using CopyLayer() where the layer 
	being copied was using alpha blending.
 
	Version 2.69 (28 August 2008)
  - Fixed: Template error that was not exporting GetMonitorInfo and 
	GetWidowInfo in Multi DLL applications, resulting in an Unresolved External 
	compile error.
- Added: DrawHeader: Both normal a delayed (late) init splits the 
	Initialisation code into three sections, with an embed between each:
		- Init Draw and DrawImage
- Add template settings code (if the defaults are overrriden)
- Call Display to render the control
- This allows the generated code to be easily overridden on a source 
		level, or for additional code to be called before or after each stage of 
		the initialisation
 
 
	Version 2.68 (22 August 2008)
  - Added: Draw.SetDisplayArea(). 
	Limit the area redrawn when calling Display, and provides rapid refreshes 
	when just a small area has been modified.
- Added: Draw.ResetDisplayArea(). 
	Reset the area being displayed to the default (display the entire image).
- Added: Draw.MonitorFromRect(). 
	Returns a handle to a monitor (display) when passed a rectangular area (for 
	example if passed the coordinates of a window it would return which monitor 
	that window is on).
- Added: Draw.GetMonitorInfo(). 
	Returns the information about a particular monitor, including the pixel 
	size, size of the work area (the area not obscured by the taskbar) etc. The 
	result is stored in the passed 
	draw_MONITORINFO group.
- Completed: Draw.GetWindowInfo(). 
	The prototype has changed. This method now returns the information for the 
	current window. The information is stored in a
	draw_WINDOWINFO group.
- Added: In the template. The ability to suppress the export of the draw 
	object from a data dll.
- Added: Picture display functionality to DrawPaint.
 
  Version 2.67 (02 July 2008)
  - Fixed: A GPF in the Draw icon loading where if the icon was loaded from a 
	resource using WinEvent to get the handle, and the size was specified, and 
	the icon contained only a 4 bit (16 colour) icon, and was completely 
	transparent (had no coloured pixels). This resolves an issue in SendTo.
 
	Version 2.66 (03 June 2008)
  - Changed: DrawHeader: The control is now populated with the width set to 
	Full rather than a specific value.
- Fixed: DrawHeader: For a number of the prompts color:black was being 
	ignored as if it was color:none 
- Added: DrawHeader: The Local DrawHeader class override is blank by 
	default, and unless it it filled in the global setting is used. If the 
	global setting is blank then the default DrawHeader class is used. This 
	allows the local setting to be overridden but still use a base class that is 
	specified globally.
 
	Version 2.65 (03 June 2008)
  - Fixed: DrawHeader, the code was not being generated correctly if a 
	variable was used for the Heading Text and Icon fields in the template.
- Fixed: DrawHeader, if the DrawHeader base class was overridden in the 
	global settings then the custom based class setting would be ignored and the 
	default class would be used.
- Added: Draw.Captcha() method, creates a "CAPTHCA" from a string, and 
	optionally saves the PNG to disk with the file name specified. A CAPTCHA is 
	a challenge-response mechanism that is intended to differentiate between a 
	human and a computer. The current implementation is very simple, but will be 
	expanded.
- Added: Draw.EnumProcessModules() method, which populates and array with 
	the handles to all of the loaded modules for the current process.
- Added: DrawHeader can now use icons from any module, regardless of which 
	DLL the icon is actually in.
- Fixed: DrawHeader template not populating the code for the x and y 
	position of the text and icon.
- Changed: The EnumFont date types did not have the draw: namespace 
	prepended.
- Changed: Merged two LOGFONT data declarations.
- Added: Module enumeration with the first instance of Draw that 
	initialised. The handles to all loaded modules are retrieved and can then be 
	used to load resources from.
- Changed: External function and API prototypes have been moved to the 
	DrawAPI.clw file.
- Added: SetDisplayArea() method that allows a specific region to be 
	updated without the entire contents of each layer being composited together 
	for a display [BETA].
- Added: ResetDisplayArea() method. Clears the SetDisplayArea setting and 
	allows the entire image to be refreshed when calling Display()
- Fixed: Drawheader: Incorrectly named properties of the class in template 
	generated code (iconPostionX, iconPositionY and barColor).
- Added: DrawHeader: Bar shading support to the template so that the bar 
	drawn at the bottom of the header can be shaded between two colours.
 
   
	Version 2.64 (23 May 2008)
  - Fixed: Old Draw Window Headings not being displayed properly because the 
	old procedure is no longer used (the global option to use the old draw 
	header template should be enabled until migration to the new template is 
	complete. See the DrawHeader 
	documentation).
- Fixed: Function called as a Procedure warning on compile.
- Fixed: Template generating the call to Init() twice which could result 
	in the GDI device contexts not being created when procedures with Draw 
	objects where rapidly opened and closed.
- Added: Logging and error checking code to the GDI initialisation, as 
	well as font rendering.
- Fixed: Copylayer() inverted source and destination calculations. This 
	could result in the copied section y coordinate being inversed, or the 
	copied blocks being inverted.
- Added: Entirely new DrawHeader template
- Added: All DrawHeader settabtings exposed on the global template
- Added: DrawHeader template ability to use a different base class
- Added: DrawHeader local template to allow the global settings to be 
	overridden
- Added: DrawHeader backward compatibility, and an option to use the old 
	template by ticking the box on the global extension.
- Added: Documented all properties and methods in the DrawPaint Class, see 
	the DrawPaint documentation.
	
		- New Methods:
- AddItem(), 
		AlignBottom(),
		AlignLeft(), 
		AlignRight(),
		AlignTop(), 
		CalcStringDims(), 
		Construct(),
		CopyItems(), 
		DeleteItem(),
		Destruct(), 
		DrawHighlightBox(), 
		DrawHighlights(),
		DrawItems(), 
		FindParent(),
		HideHighlight(), 
		Init(),
		InResizeCorner(), 
		ItemClicked(), 
		Kill(), 
		MakeSameHeight(), 
		MakeSameSize(),
		MakeSameWidth(), 
		MoveItems(), 
		PasteItems(),
		RedrawHighlightBox(), 
		Reset(), 
		ResizeItem(),
		SaveHighlightPos(),
		SetCanvasSize(), 
		SetCursor(), 
		SetGrid(), 
		SortItems(), 
		SpreadHorizontally(),
		SpreadVertically(),
		TakeClickEvent(), 
		TakeDragEvent(), 
		TakeDropEvent(),
		TakeEvent(), 
		TakeResizeEvent(), 
		WithItem().
		
- 
		New Properties:
		
- CanMoveNow, canvasColor, CopyItemQueue,
		gridColor,
		gridEnabled,
		gridStyle,
		gridWidth, hDrawFactor,
		HighLight,
		ItemQueue,
		LockParents,
		Moving, Resizing, vDrawFactor,
		ZoomFactor,
		_control,
		_DeltaX,
		_DeltaY, _highlighted,
		_HighlightItems,
		_HighlightQueue, _items, _MultiClickCount,
		_nextId,
		_StartMouseX, _StartMouseY.
 
- Added: Documented the new DrawHeader class
- Added: Drawheader backward compatibility, the template now allows either 
	the new or the old DrawHeader to use, and the setting can be set globally 
	and overridden locally. Migrating to the new template should be transparent 
	in most cases, except those where custom code has been added to the imported 
	DrawHeading procedure. This code can now be moved to a custom DrawHeader 
	class that inherits from the DrawHeader class, or the template can be used 
	to modify the settings globally, with local overrides available. Both the 
	old approach and new class based approach can be used in the same 
	application by selecting the desired option for the particular control, and 
	setting which should be the default on the global extension.
- Fixed: History documentation links were not working for entries that 
	were created before the History was split into a separate document
- Added: Documentation for the new DrawHeader class and templates, 
	migration information, descriptions of the template settings.
		- New Methods:
		
- New Properties:
			- displayText, textX,
			textY, blurSize,
			autoShadow, shadowOffsetX,
			shadowOffsetY, shadowColor,
			iconName, bgColor,
			bgColorEnd, shadeType,
			shadeDirection, 
			highlightPos,
			highlightIntensity,
			iconHandle, iconX,
			iconY, iconSize,
			barStartColor, barEndColor,
			barHeight. 
 
 
 
	Version 2.63 (23 April 2008)
  - Added: New DrawHeader class. This class completely replaces the old Draw 
	Header template/procedure:
	- The local procedure is no longer required, and does not need to be 
	imported
- Does not create and destroy a Draw object each time the control needs to 
	be drawn
- Full control over the object setting using the DrawHeader object
- More properties exposed at the template level (global template settings 
	coming soon)
- Fast, intelligent built in resizing. Add the SV resizing extension and 
	the control will handle all resizing. No hand coded needed.
- Shade background support,
- No icon control is needed or created, loading icons from disk and 
	resource is handled internally and directly.
- DrawHeader is based on Draw and hence everything supported in Draw is 
	supported in DrawHeader - making it fully customisable.
- Automatic icon size selection based on the control size
- Full backward compatibility - existing controls continue to work and 
	provide upgraded functionality
- New shaded 
- Automatic positioning if the height of the control changes (support for 
	vertical resizing)
- Automatically uses the correct icon if the height of the control 
	changes.
- Text is centred in the control based on the font sized used and the 
	height of the bottom bar (if any).
 
- Fixed: Multi-DLL compile error with new methods.
- Added: Lighten and Darken example code to the DrawImage example, as well 
	as a demonstration of the two supported modes for Greyscale conversion.
- Added: Built in icon loading from resource - WinEvent is no longer 
	needed for this functionality.
- Added: GetIconHandle 
	method to load an icon using the Windows API, which supports loading from 
	file or resource (this is done automatically, the correct source is 
	located), as well as loading any size icon and resizing icons to the 
	specified size if the specified size does not exist.
 
	Version 2.62 (16 April 2008)
  - Added some new fields to the ItemQueue in the DrawPaint class: Clipped, FitWidth and FitHeight. 
Version 2.61 (13 February 2008)
		- Added: Support for both FreeImage 3.10 and later and previous 
		releases. In FreeImage prior to 3.10 the topdown parameter in 
		FreeImage_ConvertFromRawBits and FreeImage_ConvertToRawBits was being 
		handled in reverse, and in 3.10 this was fixed - however this resulted 
		in all images loaded by the DrawImage functions being upside down when 
		the DLL from 3.10 or newer was used. This has now been handled 
		internally so that both old and new versions of the DLL are supported.
- Added: New DrawImage example that shows some of the basic DrawImage 
		functionality. This will be expanded, along with the DrawImage support 
		itself. Also a DrawPaint example will be available for future versions.
- Fixed: Unresolved Externals when compiling in Multi-DLL mode
- Major documentation cleanup and reorganisation. Documentation is now 
		split into logical sections, and the documents have been moved to XHTML 
		and all formatting is CSS based.
Version 2.60 (25 January 2008)
	- Added: GreyScale() method to convert a section of the control, or any 
	layer, to Grayscale (256 shades of gray). Supports both linear conversion 
	and perceptual conversion (which used a good heuristic to preserve the 
	perceptual brightness that the human eye would see).
- Fixed: Image() method loading 256 colour (8bit) bitmaps incorrectly, the 
	wrong bytes were being assigned to the RGB components and the byte order was 
	shifted by one resulting in a "corrupted" image where the colours were 
	incorrect.
- New Documentation for the DrawPaint Class (work in 
	progress, will be completely shortly)
- New Document for DrawImage class (coming soon)
- Improved integration for FreeImage
- Included FreeImage in the installer
- Complete revamp the documentation, added missing methods, split the 
	documentation into multiple documents and improved navigation and usability. 
	There is now a separate Class Reference, as well as a separate Layers 
	reference, FAQ, History etc.
- Added: PointInPieSlice() method - returns whether a point (x,y 
	coordinate) is within the specific Pie Slice shape (a segment of an 
	Ellipse). Typically used after drawing a pie chart using the PieSlice() 
	method to check whether a user clicked within one of the drawn slices, and 
	if so which slice was clicked in.
- Added: Additional BestFit() method that takes Longs instead of Ulong. 
	This polymorphic method is just a wrapper for BestFit() and included for 
	convenience.
 
Version 2.59 (06 December 2007)
	- Added: New features to the DrawPaint class for RightReports.
 
Version 2.58 (30 October 2007)
	- Fixed: 256 color bitmaps had an error in the bitmap header that set the 
	size to 1 bytes smaller than the actual file size, which could cause a very 
	small number of applications to not open the produced BMP. The only applies 
	to 256 color BMPs being written to disk by writing the BLOB for the image 
	control directly to disk.
 
Version 2.57 (25 October 2007)
	- Added: Option in the global template to disable 
	resizing for the DrawHeading control template.
- Added: The docs and example for the Barcode support (PDF 417) now 
	reflect the fact that the barcode function returns a value that should be 
	checked.
 
Version 2.56 (25 October 2007)
	- Fixed: GPF when starting threads very rapidly with 
	Draw controls (applies primarily to DrawHeadings). All static variables are 
	now threaded.
 
Version 2.55 (18 
September 2007)
	- Added: Support for resizing when using the DrawHeader 
	template. Please note that this has changed the DrawMakeHeadings procedure 
	prototype and if you are using this template you need to import the new 
	procedure into your application using the template utility (or by importing 
	the TXA file).
 Important: When upgrading to this version of 
	Draw please ensure you update your DrawMakeHeadings procedure by running the 
	template utility.
Version 2.53 (23
July 2007)
	- Fixed: Template issue causing a compile error in 
	Multi-DLL projects and projects not using DrawPaint or DrawImage.
Version 2.52 (16
July 2007)
- Added support for Clarion FreeImage (free)
- Integrated Clarion FreeImage functions
- New DrawPaint class for creating persistent objects, 
allowing the user to select and manipulate the objects (picking) etc. This is an 
entirely new class that provides a whole new set of functionality (Capesoft 
WriteReports is an example of the type of functionality that this can provide). 
Full documentation will be included in future releases of Draw, along with 
example applications.
- Fixed a bug when using FreeImage support in the root DLL 
and not enabling it in the application. This only applies to Multi-DLL projects 
that use the FreeImage support in some apps and not others that import from an 
app that has a different setting. This should not affect any current Draw users 
as it only applies to a pre-release version of Draw.
Version 2.41 (29 March 2007)
- Update the Multi-DLL support in the template
- New Multi-DLL example
- Add a section to the document of using Draw (and Progress) in multi-DLL 
applications.
Version 2.41 (29 March 2007)
- Update the Multi-DLL support in the template
- New Multi-DLL example
- Add a section to the document of using Draw (and Progress) in multi-DLL 
applications.
Version 2.40 (14 November 2006) 
- New property Draw.mirrorText allows the text to be flipped back
to the right direction when using RTL text rendering and the window order
is set to Right-To-Left.
- Fixed new font rendering:
- Coordinate system was off by 1 pixel
- ErrorTrap was being
called even though the SetTextAlign function was succeeding.
 
- New font rendering using the .wholeString property now supports 90 degree text
(rotation by an arbitrary angle to be added in a future release).
- Fixed problems with the new StrHeight method when used with the WholeString font
rendering.
- Automatic directional rendering of Hebrew and Arabic characters when used in
conjunction with the Window or Control RTL ordering.
- Fixed a bug when using the Draw header template with the Legacy (Clarion) template
chain and the Window Resize extension that produced compile errors
- Correct documentation regarding the 3D datatypes Point2D, Point3D, Vector3D.
Data type names had not been updated in the documentation.
- New support for MultiDLL applications, simplified to work simply by ticking the
checkbox on the global extension to support using Draw in a DLL.
- New MultiDLL support in the template to assist Draw and Progress use in Multi
DLL application
- Changed MouseX and MouseY to handle controls with scrollbars where the Draw image
is larger than the control. Returns theDraw. MouseX() and Draw.MouseY() in
pixels relative to the origin (top, left hand corner) of the Draw image,
regardless of where it is scrolled or not.
Version 2.30 (29 September 2006) 
- Fixed the unhandled case of an equals sign in BufferFont, equals signs where
drawing as minus signs (a single bar instead of two). This resolved an
equals
sign being incorrectly displayed by the .Show() method.
- Template tweaks to support AnyFont for the WindowHeading control template.
- New string support for Complex Script Languages such as Arabic and Japanese,
new font rendering properties and options, Right To Left reading order. 
- Automatic whole string rendering of Complex Script languages.
- Automatic setting of Right-To-Left reading order for Hebrew and Arabic.
- Support for additional character sets, see the new document for the .fontCharset    property and the new Show() docs.
- Updated Font related entries in the docs - see Show() method for more information.
- Add .useUnicode, .renderWholeStrings, .textAlignRTL and .ansiToUnicode properties
to the class (.useUnicode and .ansiToUnicode to be exposed in the next release).
- Added initial support for Unicode, ANSI to Unicode conversion (see above, to be
exposed in the next release).
- Additional documentation updated, more improved consistency, more links etc.
- New .Curve method supports smooth curve drawing between a set of points and uses the Draw
.curveSmoothness and Draw.curveTension properties to allow the drawing to
the modified. Uses Hermite curve interpolation.
- New ._ShowFull method
- New ._StringWidth and ._StringHeight methods
- Fixed a bug in the .WritePNG method that could result in the current layer being
written to a PNG rather than the entire image.
- Fixed incorrect drawing of double shaded boxes when the intensity parameter was
passed as zero.
Version 2.26 (10 July 2006) 
- Changed the WriteBmp, WritePng, WriteLayerBmp and WriteLayerPng methods
so that if the file exists it is deleted and a new file created for writing
the image to.
- Fixed the Barcode method
to handle barcodes where the number of columns in the barcode is a multiple
of 8 (this was producing barcodes where each line "wrapped" onto the following and the barcode looked skewed to the side).
- Fixed drawing of Pie Slices
where the chord of the arc that forms the outside of the slice had a width
or height of zero (these were drawing as triangles rather than with curved
arc edges).
- Uploaded missing images for the docs (HSV and RGB images).
Version 2.25 (24 November 2005) 
- Fixes and improvements for all arc related methods (Arc, _ThickArc, Chord, Pieslice,
ShadeArcBand, HalfEllipse etc.)
- Template changes for using Draw in multi DLL projects (Added "Export Draw Class
from this DLL" option and "Use Draw that is exported in another DLL" option).
- Fixed StrLen method for vertical strings, fixed string first character positioning
- Fixed ShadeArcBand drawing one pixel out
- Fixed Pieslice drawing the "drop" section inverted for 3D pie slices.
- Documented PDF417 barcode functions and DLL.
- Grabscreen method now fully supports all options - it no longer grabs the entire
screen, instead it now gets the specified section of the screen and places
it at the passed coordinates.
Version 2.20 (17 November
2005) 
- Added a Barcode
method which draws PDF417 compatible barcode when passed a string containing
the data for the barcode. 
- Fixed drawing of
shaded boxes a single pixel wide or high, where the pen width is set to
greater than 1 (some types of boxes used the penwidth for drawing).
- Fixed StrLen
method (was returning the incorrect pixel length for strings).
- Fixed font underlining (also now
faster and uses no extra memory for underlined styles).
- Added support for loading
icons from resources as well as disk for the LoadIcon
method (Requires a handle to the icon resource, it is recommended that WinEvent be used to obtain the handle by calling the WinEvent function ds_GetHIcon()).
- Added support for all icon color
formats for loading icons from resource.
- LoadIcon
supports loading all icon formats from disk with the exception of 4 bit and
24 bit icons from disk (all icon formats for icon resource are supported.
NOTE: Loading icons from resource requires a handle to the icon resource.
Therefore WinEvent is recommended for loading icons from resources.).
- Fixed thick line clipping when the line ran along the
edge of the drawing area.
- Improved thick line clipping to work on a per pixel
basis.
- Fix problems on reports in Clarion 6.2, where setting prop:pixels and then
restoring the value changes the value of prop:thous.
- Fixed very small pie slices.
- Added automatic bit depth detection for loading icons
from resources.
- Corrected circles (Ellipse, _ThickEllipse, LinearEllipse, ShadeEllipse,
HalfEllipse and Sphere) drawing 1 pixels left and up (many thanks to Brian
Wigal for reporting this bug!).
- Corrected spelling and typographical errors in documentation.
- New HSV/RGB conversion methods - HsvToRgb, RgbToHsv,
LightenColor, DarkenColor,
Saturate and Desaturate.
- Add Min and Max methods -each take up to 10 parameters are return the minimum or
maximum values thereof.
Version 2.15 (08 September
2005)
- Changed the HalfEllipse
method to draw both half Ellipses and Circles (only circles were supported).
- Change the way the DrawStore.tmp
file is created. This is a dummy file used by Draw. Each instance of Draw
opens this file in Share mode, the file is never read or written to. The file
is now created in the system temp directory, and the full path is used for
the file name, this avoids problems when the system{prop:datapath} is set,
and the file cannot be located when the file name is relative.
- Added an optional parameter to
Polygon and ShadePolygon
to allow a number of vertices to be specified, as well as the default of using
all entries in the array for the vertices.
- Added support for shading to the
HalfEllipse method, currently it supports linear
shading, future versions will support other shading types.
- More updates to the docs, added
more detail for methods such as Polygon and ShadePolygon,
added new parameter lists and examples, as well as new style (parameters and
example in tables), generally improved consistency, detail and layout.
- Fixed bug in the GetImagePixel
method that returned the wrong color for the last row of pixels in the image.
- Added a PointInPolygon
method that returns whether a coordinate passed is inside a defined polygon
or not. This can be used to determine whether a user clicked in any area in
the image control that can be defined by a polygon, or whether a user clicked
on a particular polygon in the Draw control.
- Added SetFontMode
to allow the font rendering mode to be set (anti-aliased, cleartype, non anti-aliased
etc.).
- Added ImageFromBuffer
- writes from a buffer that contains RGB data to a layer, allows the position
of the image to be specified, along with the ability to clip the image and
tile it both horizontally and vertically. Tiling in either direction can be
specified independently.
- Added a BestFit
method that returns the best proportional scaling when passed an existing
width and height and the dimension that must be fit within.
- Added a ClarionToRGB
method that converts a standard Clarion BGR color to an RGB color.
- Added a GetLastError
function (not a member of the draw class, so it can be called anywhere in
an app without a Draw object). This returns the last Windows API error code.
This code can be passed to the Draw FormatMessage
method, which produces a Clarion string containing the error message.
- Added a ToClipboard function that copies the
Draw image to the clipboard. This function copies the visible contents of
the control to the clipboard (so hidden layers etc. are ignored). The image
is copied to the clipboard as a bitmap.
- When resizing and retaining the data, certain sizes could cause a GPF. This
GPF was in the ResizeLayer method when copying
the data from the old layer to the new layer, where the new layer was significantly
smaller than the old one and the zero padding changed.
-  Added support 256 color icons to the LoadIcon()
method, fixed all issues with paletted icon transparency. The next release
will add support for all other icon formats (1,2 and 4 bit paletted icons,
as well as 16 and 24 bit icons). Currently both 8 bit (256 color) and 32 bit
icons are supported. Windows XP style 32 bit support the full 8 bit alpha
channel for transparency.
Version 2.14 (28 February 2005)
- Fixed
GPF in the Blank() method when blanking the canvas to a color (rather than
black or white) while the penWidth property of the class was greater than
1.
Version 2.13 (10 January 2005)
- Fixed
template error in 2.12
- Added template option to allow Draw to be easily included in a DLL in multi DLL
projects
- Added a DrawDLLMode define that the template automatically adds to the project
defines (Clarion 5 needs to have this done manually). This allows the Draw
to be compiled into a DLL and used from the DLL rather than compiling the
Draw.clw file into every app in a multi DLL project. This define supports
both Draw and Progress. See the What's New section for more information.
- Updated template to be consistent with new CapeSoft template style specification
- New AlphaCopy
method improves performance, fixes alpha errors and a possible GPF.
- Added code to automatically create alpha channels when drawing text to a layer
with an active alpha layer (still in testing)
- New DrawHeader
template which uses a single layer instead of multiple layers and supports
font anti aliasing
- Numerous updates to documentation
- Updated all example apps, totally
revamped the main example app with numerous useful features, such as drop
shadows and pie slices.
- Added HalfEllipse() method
- Fixed problems with Shaded object when a pen width and style had been specified.
Version 2.12 (05 January 2005)
- Internal release (not for public
consumption).
Version 2.11 (04 January 2005)
- Added
font anti-aliasing and rendering options (See SetFontMode).
- Added methods for enumerating all font on the system and populating a queue
(See EnumFonts)
- Added a number of new internal Draw properties and equates for fonts.
- Fixed rendering issues with some fonts that truncated some letters.
- New examples, with numerous feature additions and more useful code (such as demonstrating
drop shadows etc.).
- Added GetPixel method as an alternative name to GetImagePixel().
 
Version 2.10 (30 November 2004)
- Fixed
clipping issues with boxes.
- Fixed a small memory leak where a Draw could exit without releasing GDI handles.
- Documented the numerous new methods that have been added, such as shaded ellipses    and spheres
- Updated Draw header template to allow all settings to be modified on the properties
page and to allow variables to be used as well as literal values
- New DrawHeader utility template for adding the DrawHeading procedure for both
ABC and legacy.
- New Demo and Example applications, example application have been cleaned up and
demonstrate the features
- DrawHeadings now allows icons in the current app to be specified, as well as icons
in the application directory. See the Dynamic Header Template section for more information.
- New functions:
Version
2.09 (21 April 2004)
- A number of internal fixes, an
improved template and a large number of new features, which will be fully
documented in the 2.10 update. 
- New extension added to the template
that allows Draw to dynamically create header with drop shadowed text on windows,
simply drop the template on the window and enter text in the string (or even
leave it blank which will use the window title). See the Dynamic
Header Template section.
Version 2.08 (14 November 2003)
- Fixed GPF in Clarion 6 when writing to PNGs (threading bug).
 
Version 2.07 (04 November 2003)
- Interim release, fixes Duplicate label warnings with Clarion 6. Draw equates
now have the 'Draw:' namespace identifier prepended to them.
Version 2.06 (20 August 2003)
-  New Cylinder() method, and an
additional cylinder method that allows new types of shading on cylinders.
- Fixed GPFs caused by accessing the 0th element of arrays.
Version 2.05 (31 July 2003)
-  Only a single DrawStore.tmp file is created in the current
Windows temp directory regardless of the number of programs using Draw that
are run. (this file is always empty, and is never written to).
- Changed Windows Registry type equates to avoid duplicate
label warnings with C6 EA 5.1.
- This release is the basic version required for CapeSoft
Progress.
Version 2.04 (29 July 2003)
-  Fonts: Fixed clipping, Font point sizes are now exact (previously
they were an estimate that occasionally was somewhat inaccurate), Fixed font
positioning, both vertical and horizontal. Note: You may notice that
your fonts now display smaller than they were previously, the display size
is now correct and uses the current screen resolution to calculate the exact
pixel height of fonts.
-  ColorRange() Method - returns
a pair of colors on a range, given the start and end colors and the distance
between them
-  Added new example app (simpler and cleaner)
- Fixed shaded boxes that were 1 pixel too small when draw
the same size as a layer.
- WriteBMP() and WritePNG()
now correctly write the display buffer to disk rather than the current layer
- Added WriteLayerPNG() and WriteLayerBMP()
to write just the current layer to disk.
- Fixed a bug in the WriteBMP() method
that produced unreadable BMP's with large images by truncating the last byte.
Version 2.03
- Another massive update of the documentation, added examples and screen shots
to all methods, added an info section with further useful information for
each method, and links to related methods. Examples are now actual useful
pieces of code that can simply be dropped in an app and compiled.
- Fixed penStyle applying to shaded objects.
- Fixed Highlight() method drawing off by a pixel
(vertical). 
- Image() method documentation updated and expanded
-  Image() method supports tiling an image across a layer
- Polygons draw correctly when the current pen color is color:none
- The Polygon() Method has been modified, all the workarounds
were removed and the original algorithm revised to work with all cases.
- Polygons are now faster as well as being consistent (no misdrawn pixels).
- Corrected misdrawn pixels at the end of very thin horizontal cylinders.
- ShadedLine() method shades a line between two colors
in any direction (not just vertical or horizontal).
- Added ShadeEllipse() method
- Added ColorRange() method which determines start
and end colors at two points within a color range
- Added versioning to the Draw template, templates which are dependant on
Draw (such as Progress) now check for a sufficiently new version of Draw.
- Fixed problem with True Type fonts not displaying when ClearType was enabled
under WindowsXP
- Changed layer display order, so that the first layer in the display order
list is the bottom layer, which means that each new layer created is created
on the top of the layer "stack". 
- Fixed layers smaller than the the image control being draw from the bottom
left hand corner rather than the top left hand corner.
Version 2.02
- Fixed a bug with with layer copying, which incorrectly positioned layers
that were smaller than the baseLayer.
Version 2.01
- Added the call to UnLoadLib() for zlib in the Kill()
method.
- Corrected an error in CopyLayer() that resulted
in the last scanline being skipped.
- Corrected clipping for the HighLight() method (off
by 1 pixel)
- Corrected small bug in the BufferFont() internal method. The bug did not
affect any functionality.
Version 2.00 (Gold)
-  Draw has gone gold!
- Added Layers, layer transparency, layer alpha channels,
Hidden layers and layer drawing methods. See the section on Layers
for more information.
- Added the GetWindowsColors() method to retrieve
the current colors for the Windows interface.
- Added a layer data type and a layer array to store
layers.
- Major revamp of the documentation, neatened and cleaned up existing sections,
added a large number of new sections and clarified some of the more obscure
sections.
- Added a layerOrder array to store the layer order independently of the layer
storage order.
- Added the following methods for manipulating layers:
 
 
| Draw.AddAlpha | Add an alpha channel to a layer |  
| Draw.AlphaCopy | Copy a block of pixels from one layer to another using
alpha transparency. |  
| Draw.CopyLayer | Copy a block of pixels from one layer to another. |  
| Draw.HideLayer | Set a layer to hidden. |  
| Draw.IndexTransparency | Set the index transparency of the layer. |  
| Draw.InitLayer | Initialise a new layer |  
| Draw.MoveLayer | Change a layer's display order. |  
| Draw.ResizeLayer | Resize a specific layer. |  
| Draw.SetMode | Set the display mode. |  
| Draw.Showlayer | Set a layer to be shown when Display() is called. |  
| Draw.SwapLayers | Swap two slayer's display order. |  
| Draw.ToAlpha | Copy one RGB channel from one layer to another. |  
| Draw.WithLayer | Activate a layer for drawing to. |  
 
 
- A number of bug fixes and large number of improvements have gone into this
release.
- Cleanup up and corrected the template and template documentation.
- Added new examples, cleaned up old examples.
- Modified Init() and Kill() to allow the object to be dynamically created
and Init() and Kill() called multiple times to re-initialise the object.
- Added a destructor to the class.
- Added a large number of tweaks and improvements, including insuring that
old Draw programs continue to work flawlessly even though they now use layers.
- All example apps have been redone and a number of new examples added - see
the examples section.
- Both libpng.dll and zlib.dll are correctly loaded at runtime, if the files
are missing Draw handles the error. 
Version 1.0 Beta 11a
-  Added LoadIcon method to allow Windows icons (.ICO
files) to be loaded (currently only supports WindowsXP 32 icons)
- Changed the Show method, if the font color was less
than zero, the text would simply not be drawn, now the font color is set to
black if it is less than zero.
- Added a HighLight method that allows a color to
be XOR'd to turn a highlight effect on and off over an area.
Version 1.0 Beta 11
- Added Methods for 3D calculations (All method can be used for 2D calculations):
- PNGs produced by Draw are now compatible with all compliant PNG decoders.
- Draw now loads any DLLs at runtime (relevant for writing PNGs).
- Major revamp of documentation.
- The Image() method now supports a transparency color
for BMP's.
- New data types for 3D calculations:
Version 1.0 Beta 10
- A huge number of fixes and improvements since the last public release (Beta
7) too many to list individually.
- Fixed all polygon drawing issues, the polygon method is now robust and a
little faster too.
- A whole pile of changes to the font handling, mostly bug fixes but some
optimisation issues too.
- Added Draw.fontZoom property to allow the fonts to be globally resized for
high resolution reports and such.
- The Arc() method has been tweaked and improved, and a few rounding issues
tidied up.
- 256 colour drawing has been implemented. This should be particularly useful
if the image needs to be sent across a network, or if the 24 bit version is
bloating a report excessively. See the Init256() method
for details on using 256 colour Draw images.
- Resizing supports 256 colour bitmaps, and zero padding is now correctly
calculated.
- Lots of code cleanup work has been done, so Draw should be cleaner and more
consistent internally.
- Added a SwapBuffers() method that allows any bitmap buffer to be written
to the image control.
Version 1.0 Beta 7
- Added global extension to allow PNG support to be disabled - with no PNG
support it is not necessary to ship the zlib.dll file.
- Documented all the features of the Blank() method.
- Added patterned fills and the Draw Pattern Maker - pattern.exe, which allows
you to create your own patterned fills with a graphical interface.
- Added the SetFill() method to allow patterned fills
to be used.
- Fixed rounding error with MouseY() method.
- The Image() method did not support all the documented
features. This has now been corrected.
- The Image() method now uses the top left hand corner
as the origin, the same as all the other Draw methods
- Fixed incorrect drawing of 45 degree lines that were more than 1 pixel thick
- Alphabetised class methods in documentation and added new table for easier
access.
- Fixed SetFontColor() method that was swapping
R and G color components (Clarion colors treated as RGB instead of BGR)
- Numerous fixes to the Arc() method, particularly with
thick arcs.
- Fixed vertical font clipping.
- Character font clipping implemented. Clips at the character level, so a
character drawing off the edge of the control will only draw the section within
the control and won't wrap. Previously the character was either clipped or
not.
- SetPenStyle() handles incorrect style options
by setting the style to the default.
- Blurry fonts when black font was drawn on white background fixed.
- Fixed vertical text not printing is the font color was < 0
- Added a fontStyle property to the class, see the Show()
method for more details.
- Text had a slight vertical alignment error, this has been corrected.
Version 1.0 Beta 6
- Beta 5 was an incremental release and the documentation was not changed.
- Fixed issues with 45 degree lines (pixel popping).
- Optimised 45 Degree lines.
- Fixed boundary and clipping issues.
- Fixed an error in the line algorithm that sometimes drew lines 1 pixel too
short.
- Fixed the Blank method, when clearing to colors other
than black or white it would not clear the bottom row of pixels.
- Fixed Polygon drawing and filling.
- Horizontal Doubled shaded cylinders erroneously treated Clarion colors as
RGB instead of BGR.
- Fixed the Show method, text now draws in the correct
position.
- Fixed the  StrLen method, which returned the number
of bytes taken up by the individual color components rather than the pixel
length of the string.
- Changed the  WriteBMP method so that it is not necessary
to have called Display at least once before writing
to a BMP file.
Version 1.0 beta 4
- Changed the coordinate system to be more consistent across all draw methods,
(1,1) is the top left corner (width, height) is the bottom right.
- Full thick line support for chords and arcs.
- Dramatically improved clipping.
- Full support for thick lines with pen styles (Clarion does not support this).
- Added Resize() method to allow the image buffer to
be resized dynamically.
- Added StrLen() method to return the number of pixels
any string will take up.
- Added GetDisplay() method to allow the data in
the control to be copied back to the Draw buffer.
- Added GetDevicePixel() method to get the color
of any pixel on the screen.
- Added GetImagePixel() method to get the color
of any pixel in the Draw control.
- Added ShadeLine() method which allows horizontal
and vertical lines to be shaded from one color to another.
- Added SetPenWidth() method to allow the penwidth
member data to be set.
- Changed Image() method to allow the Draw buffer to
be resized dynamically.
- Added ResizeControl() method to allow the control
to be resized dynamically.
Version 1.0 beta 3 
Version 1.0 beta 2 
- Full Support for thick lines
- Full support for pen styles (added SetPenstyle()
method)
- Supports thick lined circles and ellipses (Clarion doesn't)
- Does not support filled chords
- Fixed bug which drew vertical lines in the incorrect colour
- Fixed GPF (General Protection Fault) on close with ABC
- Blank() method now clears to any colour
- GrabScreen() Method added to get a screen capture
- Resolved numerous small bugs and increased some methods speed
- All shaded cylinders and boxes now draw correctly in all directions
- Corrected cylinder lengths (cylinders would draw slightly too long)
- Updated demo apps for ABC and legacy.