PrintPage by Bill Murto, 73730,2505. No Copyright. It's Free. It's easy.

For printing reports without ReportSmith or other Report add-ons.
This may be just what you need.

What does it do?
Prints (not just a graphics dump) components on a Form or ScrollBox,
proportioned correctly, to your printer. You can Tag components you do
or don't want to print.

Components it can print are:
Image
ChartFX
Shape
StringGrid
CheckBox, DBCheckBox
Label, DBText
ComboBox, DBComboBox
DBLookupCombo
Edit, DBEdit, MaskEdit
Memo, DBMemo.

USE:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  PrintPage(Form1, 0);
end;
It's just that easy!

DEFINITIONS:
DesignPixelsPerInch is a global constant set to 96. You need to change this
if you design at a different PPI. You can set this from your program. No need
to rebuild this unit.

function PrintPage(APage : TScrollingWinControl; ATag : Longint): integer;

APage is a Form or ScrollBox you want to print. If you print Form2 from a
Button on Form1, make sure you include Unit2 in a USES statement in the
implementation part.

If ATag is 0, all components will be printed. Otherwise it will print all
components tagged with the number in ATag. You can have multiple tags in
one component Tag field. (2+4+8) 14 gives you three different tags in one
component Tag.

PrintPage returns the number of components printed.

LIMITATIONS:
If you don't use ChartFX then you need to comment out the chart stuff and
rebuild before you deliver the application.
StringGrids print lines depending on StringGrid.GridLineWidth only.
All text is limited to 255 chars.
Memos try to print all the text, not just what is on the screen.
Ctl3D settings are not used.
You may have to change the size of components when you use other fonts.

The code is crude and not tested much, but it works for me and it could be
a good starting point for you.

A project is included for a quick test.

Enjoy, Bill