In 1.1, we've removed the DataSet property on TSctGroupPage and SubDataBands. In version
1.03, it was superceded by a DataSource property, but kept in for compatibility, and we
noted that it would be removed in 1.1. Existing reports that only use the DataSet will no
longer run. You should convert them to using the DataSource. This should only affect very
Version 1.71 December 16, 2005
- The change made in 1.70's TacePrinterSetup.SetData method to add the parameter was not the best way to implement that change. It seems that it is causing more backward compatibility issues with code that called it than I expected.
- This release restores the SetData method to not requiring a parameter. This will be equivalent to SetData(false) in 1.70. There is a new method SetDataReset that is equivalent to SetData(true) in 1.70. Note that the default behavior will be different than pre-1.70 versions which always reset the printer before copying settings. This should hopefully fix some problems end-users had when they changed some printer settings that ACE did not directly handle, and then those changes would not 'stick' because we were resetting the printer to a default state. There are a few spots internally where ACE still needs to resets the printer. If you find the new behavior is not what you want, please change your code to use SetDataReset instead.
- Sorry for the hassle if you downloaded 1.70 and already made a code change.
Version 1.70 December 9, 2005
- This version adds support for Borland Developer Studio 2006, only for the Delphi and C++ Builder Win32 VCL personalities.
- Added an 'ifdef' for 'winprocs' in ACEIMG.PAS
- Added default printer.title in ACEOUT.PAS if description is blank to avoid problems with Adobe printer driver.
- Moved declarations of external DLLs to implementation section of ACEPSET.PAS.
- Change buffer size to 255 bytes for AceResetPrinter to resolve some 'Printer Selected is not valid' errors
- Added a new boolean parameter 'reset' to the TacePrinterSetup component's SetData method. This flag tells ACE if the printer settings should be reset before copying the new settings. NOTE THAT THIS WILL CAUSE A COMPIILE ERROR ON OLD CODE THAT USES THE SETDATA METHOD. To keep the same behavior as before, pass True for the reset parameter.
- Cleaned up a compiler hint to inline DeleteFile in ACESTR.PAS.
- Moved AceDM??? Const declarations in PSETUP .PAS from interface to implementation.
- Added psOverride option to TpageSetup.Source property and added new BinOverride property to TsctPageSetup component in PSETUP.PAS.
- Cleaned up case sensitivity hints in SCTCTRL.PAS and SCTVAR.PAS.
- Cleaned up destructor in SCTREPDS.PAS.
- New sample ACE\SAMPLES\MISC\ChgBin to show how to change bins in the middle of a report. Also shows a work-around to access unusual printer bin numbers.
Version 1.60 November 29, 2004
- This version adds support for Delphi 2005, only for the Win32 VCL personality.
- It seems we were casting the report's owner as a Tform in a couple places, and that caused problems if the owner was a Tframe, resulting in an "Invalid Typecast" error. This has been fixed in 1.60.
Version 1.50 June 15, 2004
- This version adds support for Delphi 7.
- AceDesignTime conditional has been eliminated and now ACE has properly segregated runtime and designtime packages. This will simplify installation of add-on libraries that work with ACE such as Gnostice eDocEngine. This also should slightly reduce the size of the EXEs that get produced. It will also greatly simplify rebuilding the packages if you find the need to modfiy some designtime code in ACE.
- New StretchFooter example illustrates how to simulate a stretching footerband by using the Overlayband.
- New Two_Up example shows how to print one report to an ACE file with 8.5 x 5.5 pages and then use another ACE report to print those pages 2-up on 8.5x11 paper.
- New TP_Barcode example shows how to use the open source barcode components that were released by TurboPower in an ACE report.
- New BorderType option of btSmall for thin border.
- Fixed bug in the alignment buttons for Delphi 6/7 and BCB 6.
- Modified preview form to allow arrow keys to get passed thru to the form's OnKeyDown event handler.
- Revised ACEWPDF example illustrating how to interface with wPDF from wpTools.com.
- Help file updated with new procedures for rebuilding packages.
- Fixed bug related to band color not respecting band boundaries.
Version 1.40 June 18, 2002
- This version adds support for Borland C++ Builder 6.
- Fixed a problem with the RichText label getting stuck in an endless loop on Win2000 and WinXP systems.
- Added support to ACE Professional for Pragnaan's PsAceReporterExport library.
- Corrected a problem with variables of type dtypeString that are longer than 254 charactes.
- Fixed a memory leak in SCTREP.PAS for twopass reports.
- Fixed problem with TSctCheckLabel when setting outputtype to otRichText.
- Modified the file dialog in AceViewer to handle extensions better and to work with Pragnaan's export filters if installed.
- Note that if you are using custom ACE functions using the AceAddRecordType procedure, you should view the revised example to see how to check to see if the ACE file is being exported and handle it accordingly.
Version 1.25a July 26, 2001
- This version adds support for Borland Delphi 6.
- Fixed a memory leak on TwoPass Reports.
- Modified TSctCheckLabel to output a Y or N when outputting to RichText.
- Added New SAMPLES\MISC\VIEWEVNT example to show how to globally modify the built-in previewer.
- Added New SAMPLES\MISC\ACE_WPDF example to show how to use ACE with wPDF from WPTools. This example globally modifies the default viewer by adding a button to export the report to PDF format.
- Added New SAMPLES\CMISC\CMSUBGRP example to show how to simulate a group by using 2 SubDataBands. This is a C++ example that is translated from the Delphi example in SAMPLES\MISC\MSUBGRP.
- Added SAMPLES\CMISC\CNONDATA example to show how to do a non-database report in CBuilder
- Added new SAMPLES\MISC\ACEPRINT example to show how to write a console command line utility that takes an ACE file as a parameter and prints it to the default printer.
- Added new SAMPLES\MISC\COL_STR3 example that illustrates simulation of columns, as well as dynamic manipulation of the ReserveSpace property to handle multiple stretched subbands.
- Added new SAMPLES\MISC\COLGRP example to show how to use groups together with the column simulation.
- Added new SAMPLES\MISC\DRAWLINE example to illustrate how to draw lines via the TSctCustomLabel if you need special line types that are not available because TSctLine uses a brush instead of a pen.
- Added new SAMPLES\MISC\MEMOREPLACE example to show how to do search and replace in a memo field before printing.
- Fixed a bug that caused the OnGetData events to get fired on reports where there were no data records.
Version 1.24 April 24, 2000
- This version fixes a minor designtime bug in version 1.23. The Run button would become disabled if you got an error message at designtime regarding a missing DataSource or OnDataStart event. This has been fixed.
- Modified AceMemou.PAS initialization and finalization sections. We now explicitly name the invisible form created in that unit. We also changed the owner of the form to NIL instead of Application, and added the finalization section to explicitly free the form. For 16-bit, we still have it owned by Application so it gets freed automatically by the application because there is no finalization option in Delphi1. It seems that this may have been the cause for an icon staying on the taskbar after closing the app.
- Note that version 1.23 was only released as a web site patch to ACE Pro.
Version 1.23 April 3, 2000
- This version adds support for Borland C++ Builder 5.
- Modified SCTREP.PAS to allow for drSingleRecord to work without a DataSource so that simple reports that only show the Detail band once can be done without writing events to start and stop it.
- Modified ACEPREV.PAS to let the preview window get notified of the following events: OnClick, OnDblClick, OnMouseDown, OnMouseMove, OnMouseUP
- Modified SCTREP.PAS function IsQuery was comparing Upper() to 'tquery' which should have been uppercase.
- Fixed a problem in ACERTFC.PAS where stretch = False was not working on the TSctRichTextLabel.
- Fixed problem in SCTCTRL.PAS with TSctShape occassionally printing strange colors due to missing call to InitPrint in the PrintLabel procedure.
- Modified SCTCTRL.PAS so that the TSctBand.SpendHeight function calculates a minimum value equal to the band's design-time height. This fixes a bug where a vertical divider would get printed at a height of 1 if it was on a stretchable band with no other labels.
- Modified SCTVOPT.PAS to remove the hotkey character that Delphi 5 started adding to popup menus. This caused the 'undelete' of DataSourceGuides to not find the matching name.
- Modified SCTREP.PAS to make the default captions for the TSctBand to be a single space instead of an empty string. This fixes a bug where in some versions of Delphi, copying a report causes captions to be displayed with the names of the bands.
- Modified SCTREP.PAS so that a band with a zero height would not cause a blank line to be generated for RTF output.
- Modified size of some controls on SCTDEST.PAS, ACEVIEW.PAS, ACEGOTO.PAS, SCTSTAT.PAS and ACEDEST.PAS to accommodate larger international strings at the suggestion of the folks who do the Multilizer product.
- Modified SCTDATA.PAS to fix TSctRootFormat.FormatAsStream bug that caused an AV if the string was larger than the 256 fixed buffer size.
- Modified SCTREG.PAS and SCTREP.PAS to add a new property editor for the ReserveSpace.Band property. This fixed a bug where the dropdown list of bands would show bands from other reports on the form as well as any TCustomPanels on the form. Now the list is limited to bands from that report only.
- Modified ACEALIGN.PAS and SCTREP.PAS to fix a bug where the alignment buttons would modify all selected TSctLabels. Now it only modifies labels on that report.
- Modified ACEVIEW.PAS to add a global place (AceViewEvent) where you can attach code to the default viewer right after it has been created. This will be a better place to globally modify the default preview for the entire application.
- Modified ACEPSET.PAS ACESETUP.PAS and PSETUP.PAS to define the print quality DMRES consts. They are incorrectly defined in D5's windows.pas unit as LongInt's which can cause Range Check errors.
- Modified SCTREP.PAS for TSctBand.Destroy method. Rearranged sequence of inherited Destroy call to avoid an occassional AV when freeing the ReserveSpace property.
- Modified SCTVAR.PAS and SCTCTRL.PAS to add a DisplayText property to the TSctDbVar which grabs the DisplayText value from the TField. The TSctVarLabel now has a UseDisplayText property that defaults to False. If you set it to True, it will show the DisplayText value it got from the TField. This will work for all non-blob TField types, so if you use the OnGetText event of a TField to return a formatted value, you can use it directly with ACE now.
- New Delphi examples have been added to ACE\SAMPLES\MISC:
- AceEscape - Illustrates use of a custom function to send escape codes to printers.
- BmpBarCode - Shows how to use the barcode component to generate a BMP instead of printing on the report conmponent.
- BmpSave - Illustrates a custom viewer with buttons that let you save the current page to either a BMP or metafile.
- Calendar - very rudimentary calendar layout for a report.
- AceKey - shows how to modify the default previewer to handle keyboard scrolling and page movement.
- New C++ Builder examples have been added to ACE\SAMPLES\CMISC:
- AceEscape - Illustrates use of a custom function to send escape codes to printers.
- Across - Illustrates how to print multiple records across the page
- TextOut - Illustrates how to use the OnAfterPrint events of the bands to send out ASCII text output.
Version 1.22 September 3, 1999
- This version adds support for Delphi 5.
- Fixed problem with ReportHeader getting in an infinite loop if it was set to stretchable and exceeded one page. (SCTREP.PAS changed PFHeight to GetPageFootHeight twice in TSctPage.PrintBand procedure)
- Fixed the TAceAceFile and TAceDeviceContext classes so that the do not produce an abstract method warning when you create them (ACEFILE.PAS)
- Fixed a problem if you had a form open read-only in the IDE, and tried to add a group or a band. We were 'eating' some exceptions.
- We added a new $define called AceDesignTime which is used to exclude much of our designtime code when you build an EXE. If you rebuild the designtime package, you will need to set this define in the ACE.INC file, otherwise you should leave it undefined for normal use. Note that in Delphi 5, if you leave this defined, the linker will try to find the Delphi unit DSGNINTF.DCU which is no longer automatically available. Borland does provide the DSGNINTF.PAS file as a stop-gap measure for users who still need to link it in, but you should not rely on this being available in the future. If you are still using Delphi 1,2 or Cbuilder 1, we recommend that you leave the AceDesignTime defined, otherwise everytime you rebuild your component library you will have to be changing the setting. In Delphi and CBuilder versions that use packages, we recommend defining the AceDesignTime Conditional in the project for the package, so that the ACE.INC file does not need to be changed.
- Added support for ftWideString and ftFixedChar fields.
- We made major changes to the SCTCONST.PAS file and the SCTREP32.RC resource file to include all runtime strings I could find. If you used a resource file before, you will need to change it
- We removed the ACEABORT unit which was just a dialog used by ACEPSTAT. This was converted to a common function using a standard messagebox so that the same code would be shared with SCTSTAT and use resource strings. Modified the REPTEST sample project to use the new function instead of ACEABORT.
- Added Hint to Printer button on AceView.PAS to indicate that right-click of print button sends all pages to printer without prompting.
- Added Hint to ZoomValues on AceView.PAS combo-box to indicate that double-clicking the toolbar will toggle between 100% and whole page.
- Added Hint to the PageNum label on AceView.PAS to indicate that double-clicking it will bring up the Jump to Page dialog.
- New Sample Ace\Samples\Misc\SpanPage illustrates a technique for wide reports to split their output into multiple pages horizontally. The sample takes any table, and dynamically prints all the fields across the page and spans multiple pages as necessary.
- New sample ACE\SAMPLES\MISC\ACROSS illustrates another way to print data across the page without needing to read in multiple records at a time. This is done using the xPos and yPos properties.
- Starting with Delphi 5, we made a slight change to how we get a Record Count for TQueries. In earlier versions we called the BDE function dbiGetRecordCount, and starting in Delphi 5 we are using the DataSet's RecordCount property. The record count is only used by the progress meter. If this causes any problems, you can turn off the record count with the NoRecordCount property. This change was made so that we have nothing in our library that would cause the BDE to get linked in.
Version 1.21 February 24, 1999
- This version adds support to ACE Professional for C++ Builder 4.
- Added compiler switch to turn off RangeChecking on ACEOUT.PAS
- Change ACEVIEW.PAS to correct problem with making a stand-alone viewer when the Generic Text driver is your default. This is implemented with a DEFINE because the logic should only be used when making a standalone viewer, not for general use.
- Change to TotalVars to support ttSum for Booleans. Previously, ttSum for any non-numeric types would always return zero. Now, ttSum for Booleans will add 1 for any True values and 0 for any false values, effectively letting you know how many Trues there were.
- New sample programs include:
- an example of a stringgrid,
- an example of how to modify the vertical position with the YPOS property
- a Math Facts report that illustrates some nice techniques for dealing with non-database style reports, as well as how to make one report work several different ways with a small amount of code.
- a very rudimentary example of a work-around for output to HTML.. It does not handle graphics, and stretched text fields are a bit awkward. See ACE\SAMPLES\MISC\ACEHTML.
- Change to ACEFILE.PAS to get printer settings from the StartPage instead of from Page 1. This caused problems when printing a page range from the preview if the starting page's printer settings were different than the beginning of the report.
- Fixed problem in the ACEMERGE.PAS utility program to update it for the changes to barcode printing that were made to allow finer resolution. ACEMERGE did not properly save the barcode labels in the combined ACEFILE.
- Fixed a problem that occurs when you generate a report with no printer drivers present on the computer. Some of the printer settings were not getting stored in the ACE file.
- Worked around a Delphi bug regarding the ASCII table type. When accessing an ASCII file with a schema, all fields return True for IsNull. We now explicitly check for ASCII table type and ignore the IsNull property of the field. Previously, ACE set any variables for such fields as null.
- Fixed a bug where the OnDataFinish event would get called twice if the NoDataQuit property was set to True.
- Modify print destination screen. Screen and Cancel had the same hotkey. The resource strings file has been changed to make 'e' the hotkey for screen. We also added resource strings for Destination Prompt from preview. Note that the same strings are used for comparable controls on both prompt dialogs. See the topic 'Resource Strings' for information on modifying these strings.
Version 1.2 - August 21, 1998
- Version 1.2 will only be available on CD, not as a patch.
You need to have your registration sent in to receive this.
- Worked around a few Delphi 4 bugs that affected the
- Added a new global variable AceViewerDir for setting the
default directory of the builtin previewer.
- Added some additional options in the FAST dialog when you drop
labels that will require the band to be resized.
- Fixed a couple bugs in the Diagnostic and Overview reports.
- Fixed a bug where an Overlay Band set to Print First would get
omitted on the first page if a page range was specified to start other than at page 1.
- Fixed an access violation that sometimes occurred when
dropping a report component in Delphi 4.
Version 1.15 - July 8, 1998
- Delphi 4 support was added
- The Shade property was added to the bands
- Some various minor bug fixes.
Version 1.1 - March 24, 1998
- We are still finishing up the updates to this documentation
and the new printed manual, but we could not delay releasing the code any longer. We
apologize for the delay.
- Version 1.1 adds official support for C++ Builder 3.0 as well
as many new features and enhancements to the designer.
- There is a new TSctRichTextLabel in the 32 bit versions that
uses Delphi's 32-bit RichText control for printing RTF memos on your reports. Note that
this uses the RTF support that is built into Windows95 and WinNT which is limited compared
to products like Word.
- The TSctImageLabel now supports metafiles and enhanced
metafiles. JPEG is also supported in Delphi 3 only (using the JPEG unit included in Delphi
- The FAST button has been totally redesigned to give you much
more control. It works similar to Delphis Tfields editor which lets you drag and drop
fields directly onto the form. The FAST button lets you control where a text label (if
any) gets dropped in relation to the label containing the data. Multiple labels can be
dropped at once with automatic resizing of the band height, and you can even UnDo the most
recent label drop. We are also trying to use information from the Delphi Fields Editor for
things like captions and format information.
- The Band Manager interface has been enhanced to use
right-click context menus and drag and drop capabilities. This dialog shows a graphical
hierarchy of your bands, and you can drag and drop a whole branch of the band tree and
attach it to a different band. It is also much simpler to rearrange the order of the bands
in this graphical view.
- The Data Control Center has also undergone several
enhancements. We have reduced the default size of the dialog so it fits better at various
screen resolutions. We have also added Zoom buttons in each of the panels in the dialog so
that you can more easily work on each section of the dialog. When adding an Expression
Variable, we now keep it active in the Object Inspector so that you can easily go change
its name or other properties right away.
- In the Data Control Center, we have added a new type of
Database variable that is persistent. The automatic database variables did not fit in well
when you had queries that might use different field names. With the persistent database
variables, you can set up the variables you need, and modify the FieldName property at
runtime if necessary.
- We have also added more ways for you to reduce any unnecessary
overhead from the automatic variables. You can now remove DataSourceGuides that are not
being used (right-click on one for a context menu), and we have added an Optimize button
that will delete any unused variables and DataSourceGuides after you have finished
designing your report. You may now also rename the automatic database variables.
- The TSctVarLabel now has a Caption and a Lines property so
that you can now have multiline static text. TSctTextLabel is still defined in the code as
being the same class as the TSctVarLabel, so existing reports will still work, however it
has been removed from the palette to avoid the confusion of having two components that
have the exact same capabilities. The TSctVarLabel now has 3 possible sources for the
information that it will print. In order of priority, it can print the Variable, the Lines
property, or the Caption property. If you have previously used the work-around of a TMemo
and an expression variable for printing multiline static text, you might now want to just
move the memo directly to the TSctVarLabel. Other existing reports with TSctTextLabels
will not gain any technical benefit from changing them to TSctVarLabels, so don't bother
changing them unless it is for some in-house coding standards.
- There are a few other minor changes to the TSctVarLabel. There
is a new SuppressBlankLines property which suppresses blank lines in a memo. There is a
SuppressWhiteSpace property that will remove any trailing blank lines at the end of a
stretched memo, as well as at the beginning of each new page so that you don't start a new
page on a blank line. When you set the Shading property of a label, Transparent now gets
set to False. Setting WrapText to True now also sets Stretch to True.
- We have simplified some of the internal class hierarchy.
TSctGroupPage is a Descendant of TSctPage, and previously some properties were added at
the TSctGroupPage level. Now, both TSctPage and TSctGroupPage refer to the same component
and each contains all the functionality. In the documentation, TSctGroupPage will be the
only one documented, and the TSctPage reference will be maintained for backwards
- Bands now have a KeepTogether property. Normally, a
stretchable band will print a portion of its contents at the bottom of a page if its
designtime height will fit on the page. If you want a stretchable band to try and stay all
on the same page, setting the KeepTogether property will tell ACE to use the stretched
height of the band when determining if it should start a new page.
- In the designer, we have added 4 alignment buttons. Delphi's
alignment palette does not work across panels, so if you want to align labels on different
bands, you can now use our buttons to left, center or right justify a multi-selected group
of labels. The first label that you selected will be the one that the others will be
aligned to. There is also a PageCenter button that lets you center a label or group of
labels based on the current page size. Note that this just sets the Top and Left
properties, it does not move them again if you change paper size.
- We have added two embedded reports into the designer. The
first one is a Diagnostic Report. If you press the Diagnostic Report button, ACE will
analyze your report component and give you a report of potential problems such as
mismatched updatelevels, missing properties, or unusual combinations of properties, such
as a memo that does not wrap and stretch, or a Color property set with Transparent set to
True. Think of this report as your own on-site tech support person.
- The second embedded report is an overview report. This report
will print out an overview of your report design, listing each band, its labels, the
variables that are defined, and most of the key properties. It is a nice documentation
tool, and is also a handy tool for desk-checking your report without having to hunt around
in the object inspector to see how everything is set up.
- Most of the printer setting properties now have a default
value that uses the current setting of the printer driver. There is also a new property,
FormName, which lets you specify an NT printer form name. To create a form, you need to go
to Start|Settings|Printers to open the printers folder, then select File|Server Properties
to get to the dialog where you can define forms.
- The TSctGroupPage has a new OnBeforeNewPage event. This event
allows you a simple work around for implementing some simple snaking column output by
suppressing the NewPage call and resetting the print position. There are two new examples
that illustrate mailing labels and a group report using this technique.
In the ACEOUT unit, We have added the global variables PrintOffsetX and PrintOffsetY and
the event OnPrintOffset. We have found that there are buggy printer drivers that do not
correctly report their unprintable area, so positioning of the upper left corner of output
is not accurate. With these variables, if you decide that you are printing some reports to
pre-printed forms where accuracy is critical, you can implement various ways to save these
adjsutment factors. These properties are based on 300 units per inch. A simple
implementation might just store these offsets in an INI file which you could use to set
the properties when your application loads. A more complicated approach could use the
OnPrintOffset event to see which printer is being used, and dynamically set these
properties from a list of printers and offsets. Most users will not need to worry about
this since it is only an issue for form printing where position from the paper edge is
critical, and where the user is unable to find or use a compatible printer driver.
- Some new methods were added to the AceCanvas.
- Totals now work with non-numeric variables. If non-numeric,
then ttSum will be zero, but the count will still accumulate.
- The Destination dialog now uses Tedits instead of TMaskEdit
for the page range and number of copies.
- The low level printing code has been changed. Previously, ACE
relied on Windows scaling routines to do much of the work at handling different output
resolutions. The old method simplified some things, but needlessly complicated other areas
of printing, and we believe it also brought some printer driver bugs into play. By
handling most of the scaling issues directly in ACE, we seem to be avoiding some of the
printer driver bugs, in particular, users who needed to set the TextDriverCompatibility
property as a work-around should test to see if this version no longer requires the
work-around. With this change, we have also removed the DirectPrinter property on the
- Bitmap printing has been rewrittento fix some problems with
the quality of output as well as a problem where images displayed on the form would get
trashed if the report printed those same images.
- AsString has been implemented for memo variables.
Bug Fixes in 1.1:
- Fixed Access Violation when closing preview while still
- Fixed a bug with totals related to repeating Detail bands.
- Labels no longer say "fill in Caption" at runtime if
caption property is empty.
- Fixed some duplicated DataSourceGuides in Delphi 3.
- Fixed GPF problem in Page Range where the "TO"
number was greater than the actual number of pages. Also fixed a page range problem when
trying to generate only a page range, but where there were stretchable bands.
- Fixed a problem when scrolling to the right on a report.
- Changed ACEFile to handle long strings.
- Fixed a problem where fonts were printing the wrong size when
a report was created in one resolution but printed in another.
- ACE now closes any DataSources that it opened after executing
a report. This was a problem when using the design-time preview, because the Active
Properties would need to get reset by the developer after hitting the Run button. There is
a new CloseDataSources property on the TSctGroupPage that can be set to False for backward
- Fixed ImageLabel where it would display the variable name if
the image was empty.
- Fixed problem where the ReportHeader's updatelevel was not
working and attached bands were not printing if the ReportHeader band was not visible
(Updatelevels are supposed to fire even if the band is not visible)
- Numerous changes have been made to the underlying code that
handles printer setup.
Version 1.09b - May 4, 1997
- Version 1.09a provides official support for Delphi 3.0, and
the full version is now called ACE Reporter Professional. A new version, ACE Reporter
Standard, that only supports Delphi 3 and does not include source code is being made
available exclusively with the purchase of Delphi 3 from ZacCatalog.
- The biggest change that you wil notice in 1.09a is that
PageManager is gone! We have totally revamped the way that you create expression and total
variables. We have combined all the Variable related tasks onto a new Data Control Center
form that is called by pressing the Data button on the report's toolbar. The Bands and
Groups have been moved to another form that is called by pressing the Band button on the
- Now that the variables are all quickly available on the Data
Control Center, the quick selection lists that were introduced in 1.08 via the eyeglasses
button have been removed, and that form will be the Info form. Currently it displays the
ACE version number and selects the TSctGroupPage into the object inspector. We have plans
to add some additional features to this form in a future release.
- When creating a report on a form that has many datasources
with a large number of fields, it was possible to get an out of memory condition on some
systems. We have added logic to prompt the developer when more than 100 database variables
are going to get created. This will let you prevent ACE from creating the variables, so
that you can then go into the Data Control Center to define which fields you want defined.
If you have that many fields, most likely, you will not be using them all in the report,
so it is a good idea to selectively define them to reduce overhead. Unless you have out of
memory problems, we recommend leaving them all as autocreate while intially designing the
report, and then after finishing the report, go back and undefine the ones not used.
Version 1.09 - March 21, 1997
The main new feature with this release is support for
Borland's new C++ Builder product. We are pleased to offer this support at no additional
charge to our customers.
There were a few minor bug fixes that were made in this
- When using the size psCustom for paper size it gets reset to
psUseCurrent. If you set the size property of the PageSetup to psCustom and then hit the
run button, the size property will change to psUseCurrent.
- Printer settings are no longer reset when run button is hit.
- Scrolling in preview resulted in messed up text when a
report was created in one resolution, large fonts or small fonts, and generated or viewed
in another resolution. This has been fixed.
- When using rtf output the font it set after a tab for a
column which fixes problems when using the underline font.
We also added a few new conveniences in this release:
- Also, a change was made to the built-in previewer so that
you can close the window without first aborting the report.
- The Print from preview dialog no longer has the Ignore File
Printer Settings checkbox. We now detect if you made any Print Setup changes and use them
- The default method of printing to the printer has changed.
There are two new properties, PrintDirect and CollatedCopies. Previously, if you generated
the report to the printer, it was sent directly to the printer using Delphi's Tprinter
class. There were performance penalties in doing this for a variety of reasons. By
default, reports are now generated to an ACE preview file and then sent to the printer.
This approach does a better job of managing resources since we know ahead of time all the
fonts brushes and pens that need to be created, and therefore do not create and destroy
them constantly. This may cause a problem for long reports if the user does not have
sufficient disk space to create the temp file. You have the ability to set PrintDirect to
True in code if you think this may be a potential problem. This approach also made it easy
to add collated copies as an option. This change affects anyone who has made their own custom status. There is now a
ssGenerating status that is sent to the OnUpdateStatus event.
- The Eyeglasses icon in the report designer now has a new
action. In addition to selecting the TSctGroupPage component in the object inspector, it
also displays a window with lists of the non-visible ACE components (variables, groups and
DataSourceGuides) so that you can quickly select them into the object inspector. If you
want to select the TSctGroupPage without showing this navigation form, you can now
right-click the eyeglass button.
Version 1.08 - January 9, 1997
- IMPORTANT - CONVERSION OF
EXISTING REPORTS REQUIRED!
We made a major change to a few events. We had previously defined
several events such as OnPrintWhen to be 'function' events instead of procedures. While
this seemed to work just fine, we have since noticed that the Delphi docs instruct us not
to do this. We expect this to be a problem for us in the very near future, so we have
converted these to procedures in this release. This will require you to run a conversion
utility that will fix your PAS files. It will add a second parameter called Result to each
of these events, so the code section of these events should not need to change. If you do
not run the conversion, your program will still run, but these events will return
incorrect results. There is a seperate help file included with the conversion utility
which explains these changes in more detail.
- There is also an option to retain the old function events by
adding a compiler directive to the source code and recompiling ACE, but we do not
- We have had a few reports of people experiencing problems
trying to use the debugger with ACE events. We suspect that these function events may have
contributed to that. If you had trouble with the debugger before, please try it again
after implementing this change and let us know if you are still having a problem.
- We modified the AsBoolean property to return True for single
character values 'YyTt' The Checkbox label now also shows strings beginning with YyTt as
- We added additional display options for booleans similar to
Delphi's TBoolean field.
- We fixed various problems with the RTF output.
- We fixed a problem with the Copies not working correctly.
- The Description property of the report now shows up as the
print job description in the PrintManager.
- Bins should now get selected correctly in most cases.
Additional logic has been added to the Paper bin selection to pick the best match from
existing bins when the bin defined in the report does not exist for that printer driver.
- A new TrueTypeOption property has been added to the PageSetup
so that you can force TrueType fonts to print as graphics. This is needed primarily for
handling double-byte characters in languages such as Chinese.
- A new event, OnNewPage has been added so that printer settings
can be changed on the fly in case you need to switch paper trays or change orientation in
the middle of the report.
- We added a UseCurrent option for papersize so that forms could
be used under Windows NT.
- Fixed the PageRange defaulting on the destination screen.
- Fixed a problem where shading came out black on NT4 when
BrushStyle was Clear.
- Added NoDataQuit property and OnNoData events to the
TSctGroupPage. This allows complete suppression of the report if there is no data, and
provides an event so that you can optionally notifu the user that there was no data.
- Added NoRecordCount to the TSctGroupPage. By default, ACE will
try to get a record count at the beginning of the report so that it can display a progress
meter. Some users have reported problems with this feature not being supported by some
back-end databases, and an exception was being raised. If you have a problem, you can set
this to True to avoid the attempt to get the record count.
- Fixed a problem in the viewer where it displayed 100% when it
was not quite done.
- Fixed a GPF that occurs when aborting printing from preview
when using the two custom preview examples provided.
- Modified the report designer to add crosshairs, to keep the
rulers always visible when srolling, and to improve the scrolling in general of the report
at design time.
- The Bands tab of PageManager now defaults to fully expanded
instead of fully closed. This will make it easier to view the bands hierarchy.
- We've made a major change to our help file. It has been
renamed from ACE_HELP to ACEHELP. It is currently still under construction with a lot of
incomplete sections, but it contains more information than our old help file. We've added
a component reference showing the public and published properties, methods and events of
the components and objects in ACE. This file will also be the basis for our new printed
documentation. We hope to post some interim revisions of the help file on our web page
prior to the release of 1.1. Note that the context sensitive jumps for the properties are
not done yet, so you need not install the KWF for this release.
- To Select the TSctGroupPage component you must press the
button with the glasses bitmap on it. This button is to the right of the other buttons on
the top of the reports.
- Should not get a code segment to large error anymore. I
suppressed some compiler settings within the sctrep.pas file.
- Application.HelpFile := 'AceHelp.hlp' is no longer set. This
caused in some cases Delphi's help not to load.
- Fixed exception when no printers are loaded on win95.
- Fixed a gpf when aborting preview generation when modal
preview is set.
Version 1.07a - September 12, 1996
- Fixed problem with RTF output that got broken in 1.07.
- Fixed problem where spaces got lost when printing multi-line
memos that had a lot of upper-case text.
- We changed the label control to be inherited from
TGraphicControl instead of TCustomLabel, so if you set the focuscontrol property of the
TSctLabel component then you will get a message when loading your existing forms that the
property no longer exists. You should ignore the warnning, then re-save the form.
Version 1.07 - September 9, 1996
This version is primarily a bug fix release. There are a few
minor new features listed below.
- A new component, TSctCustomLabel has been added to allow you
to do your own drawing to the TAceCanvas more easily. TAceCanvas is similar to, but not
compatible with Delphi's TCanvas. Most of the drawing methods closely parallel the one's
- The previewstream property on the PageSetup no longer exists.
Ace now has a limit of 500k that will be stored in memory, after which, the report will be
buffered to a filestream. This should be more than enough for an entire report, except for
reports that include a lot of graphics. There is an (AceMaximumMemoryUsage: LongInt)
defined in the acestr unit where you can adjust the amount of memory that Ace will use.
This is in bytes.
- In the GroupPage.PageSetup there is now a property called
TextDriverCompatibility which fixes a problem when memos are sent to a text only driver.
This should only be set if this report will go to a text only driver. You lose
justification of memos when you use this.
- In the GroupPage.PageSetup.PreviewSettings there is a new
property called Zoom which lets you set the default zoom value for the previewed report.
For custom previews this does nothing unless you specifically program it into your
- When there are no records to be printed the Report Header and
Footer along with the Page Header and Footer will now get printed. If you don't want
anything printed you should check to see if there are any records before you run the
- A band will now stretch to the height of an imagelabel if the
band is marked stretch.
- Fixed a gpf when adding a totalvariable from the fast screen.
- Fixed a problem when a varlabel was set to wraptext and not
stretch and band was set to stretch. The label was forcing a page break.
- When dropping a memo with the FAST button, wraptext and
stretch are now set to true.
- Background property on TAceMeter is now spelled corectly. If
you used the property on an existing report, you must load the form you used it on and
ignore the property found error and set this again.
- Fixed total problem when there were no subdetail records. The
count was getting set to 1 when it should have been zero.
- Fixed problem overriding printer settings on the destination
screen when going straight to the printer.
- Fixed problem with bcdfields.
- Clear out total when there is no SubDetail records. This did
not effect any total values unless you were referencing them from an expression value.
- Colors were not printing correct on labels if you entered in a
- Rtf output would hang if the visible property on a label was
set to false.
- Visible will no longer have an effect on a label. To suppress
a label printing you must use the labelprintwhen event. Possible behavior
- Put repeat back on detail band. This was taken off by mistake
when the repeat was taken off the subdetail band.
- Fixed some double repainting in the previewer.
- Fixed gpf when deleting bands and when totalvariables or
expression variables had their updatelevel property set to the updatelevel of the band
- Fixed gpf if imagelabel picture and variable were not filled
in and you tried to print it.
- Fixed whole page zoom when preview window is resized.
- Fixed "fill in database field" error.
- Fixed varlabel display when wraptext was true and the table
was not active.
- Fixed problem with memofields if it was longer than two pages.
- Now the AceFileName property is used as the default when
saving a previewed report in the built-in previewer. If you have a custom preview, you
will need to handle this yourself.
- Added IsNull to the no_bde files which was left out in the
Version 1.06 - July 23, 1996
Well, this version finally includes the release of source
code for registered users. This version is pretty much feature-complete as far as our 1.1
update goes. The main thing left before the official 1.1 designation is the new printed
- TSctLine component worked off the Pen property, but it rounded
corners. We changed it to use the Brush property so that they will have squared corners.
You will need to open up each report that uses TSctLine and save it so that it gets
updated. Otherwise you will get a property not found error.
- The calculation of the line height for memos has been changed
slightly, so if the new line spacing causes a problem in your report layout (it should now
use less space), you can adjust it with the WrapHeightPercent property on the label.
New features in this release include :
- BorderMargin property on labels
- RotateFont property on labels (not implemented for memos and
- Full justification option for memos
- Shade property for labels
- Improved status display for 2-pass reports
- Quicker stopping of report generation when specifying a page
range. Previously the report would continue generating after the end of the page range was
reached, even though it properly discarded the unwanted output.
- New property SuppressNulls on labels and IgnoreNulls on
TotalVars allows for alternate processing of null values.
- New SuppressRepeats property on the TSctVarLabel allows you to
suppress printing the label when the current value is a repeat of the previous value.
Bug Fixes include:
- Incorrect background color for labels when printing direct to
printer if band has a color and the labels don't.
- Fixed problem with a custom page size and AdjustMargins set to
- Fixed problem where subdata bands would still print when there
were no matching subdetail records.
- Fixed problem with preview window type being set to modal. The
new immediate preview will only work if nomodal, so it has been modified to generate the
full report before previewing if the window is specified as modal.
Version 1.05 - June 21, 1996
- We've rewritten over half the code for this release. All the
low-level print calls have been completely redone to improve speed and to add the ability
to do custom print previews. The new custom preview capability allows you to create your
own preview forms, and you can set them up to be specific for each report, or you can set
one to be the new default format.
- The preview now allows you to save a report to a file for
later viewing or printing.
- The preview now allows you to view the preview as soon as the
first page has been generated. You no longer need to wait till the entire report has been
- You can now override the print status screen, the print
destination screen as well as the print preview form, and you can make your overrides
become the default without needing to change any report specific things.
- We have fixed a couple problems with memo printing. Certain
conditions caused a blank line to print at the beginning of a memo. The hex 8D 0A sequence
generated by some memo editors was not being recognized as a soft carriage return.
- We have added the ability to set the spacing of lines within a
memo field to a percentage of the font height.
- We've added a double-pass capability so that you can now find
out the total number of pages that a report will have and print Page 3 of 25. With the
double pass option, you can put whatever code you'd like into the various events, and you
can accumulate some pre-processed totals during the "pretend" pass if you'd
like. We still recommend handling any of this type of pre-processing directly in code
before running the report.
- We have fixed a problem in the designer with the display of
group header and footers. In the designer, if more than one group was defined, the group
header and footer bands displayed in the wrong sequence.
- We've also added the \ACE\NO_BDE subdirectory that shows an
example of how to create a project that uses ACE but does not require the BDE. Normally,
the references in ACE will try to always load the BDE at run-time, even if you make an EXE
that does not use any tables. If you truly need to exclude the BDE from your app, there
are stub functions here that will let ACE work without any TTable substitutes.
Version 1.04 April-18-1996
We added 2 minor new features in this version, there is now
an underline border type for the labels and bands, and in the FAST button dialog, you can
now tell ACE to add a vertical divider between each field.
Bug fixes include:
- Fixed a problem with scaling when printing to a dot matrix
printer in landscape mode.
- Fixed a problem with scaling of some fonts when printing is
done with different screen font size (i.e. large/small font) than it was designed in.
- Version 1.03 made the preview dialog StayOnTop, but this
caused PrinterSetup to be behind the printer destination dialog. We fixed this by telling
the destination windows to not StayOnTop when the PrinterSetup is called and then restore
- We fixed a problem where ClipRect was not always obeying a
False setting. Also, on memos we fixed a bug in 1.03 when memos contained a tab.
- Datasets are no longer activated every time a form is opened
up in design mode. This previously caused any TQueries to get executed every time when you
went in to change a form.
Version 1.03 April-4-1996
- The new DataSource property was added to better support
DataModules in version 2.0, as well as better support for referencing tables on different
forms than the one the report object is placed on. We've had a few users report situations
where their report accessed tables on a different form, or a DataModule, and after saving
the report, when they reloaded it, the automatic variable definitions were lost. If you
had any of these difficulties in 1.02, please see if this version solved them.
- We've added a new Variables button on the DataSources page of
the PageManager. The Variables button will let you easily create database variables for
the database fields. The automatic variables definition is fine in most cases, but if you
have many tables on the form, it can create extra overhead by defining lots of variables
that are not used on the report. This new dialog lets you quickly define only the ones you
need to cut out overhead.
- We've added an OnDataFilter event to the TSctGroupPage and
SubDataBands so that you can easily omit records from your report by returning False in
this event to omit the record.
- We have added RTF output as a "work-in-process"
feature for your experimentation. You can Set the OutputType of the report's TSctGroupPage
to otRichText, and set the RtfFile property to define the output filename. Each of the
labels also has 2 new properties, Row, and RtfPrint. Row is used to tell Ace which line of
the RTF output the label should be on within that band. RtfPrint is a Boolean that can be
used to suppress a label in RTF output. Although RTF output seems to work, we do not
endorse it for production use yet. However, feel free to experiment with it and give us
your feedback as we fine-tune it for the next release.
Version 1.02 March-6-1996
- We've added a 32-bit version of the library to support Delphi
2.0. This made the default install change to support separate subdirectories for 16 and 32
bit ACE DCUs.
- The procedure for installing the component has also changed.
Previously you had to add both the SCTREG and SCTCTRL DCUs to the library. Now you should
only add SCTREG.DCU. You should uninstall SCTCTRL.DCU if you installed a previous version
- We've added a new WindowState property to the sub-component
TSctPreviewSettings to the TSctGroupPage component.
- Additional resource strings have been added to SCTREP.RES
- The BorderType property has been added to the TSctGroupPage
component so that you can put a border around the entire page.
- A new band type, Overlay Bands have been added. These will
allow you to simulate pre-printed forms and watermarks by giving you the ability to print
anywhere on the page.
- A new label type has been added, TSctBarcodeLabel, which
allows you to print 3 of 9 style barcodes on your report.
- Two new samples have been added. FCODE.PAS illustrates how you
can dynamically create labels and variables in code. RORD.PAS illustrates how you might
use the overlay bands to create an invoice form.
- The Report Header band's behavior has also changed. The first
page header will always start on a new page and will print only after the report header
and any attached bands are completed. Previously, it was difficult to force the report
header to be on a page by itself, and if it was longer than one page, the report header
would start printing before it was done. To simulate the behavior of the old report
header, you should create a subdata band attached Above the Page Header, with an
OnPrintWhen event that checks for the first page. Also note that the page numbers do not
start incrementing now until the first page header, so it is possible to have a several
pages of report header (assuming you attach a subdata band to the report header) before
Page 1 of the report prints.
- We also cleaned up a couple bugs. You are not allowed to use
the Windows clipboard to copy an entire report, however we were unable to prevent this on
previous releases. Now, if we detect a report in the Clipboard when we are initializing a
new report, we will assume that you just pasted it, and will issue an error message until
you clear the clipboard. Also, there was a problem with printing Foxpro memo fields using
the Apollo driver that we have worked around.
Copyright 1995-2004 SCT