The SDL Component Suite is an industry leading collection of components supporting scientific and engineering computing. Please visit the SDL Web site for more information....


Declaration:procedure CopyToOpenPrinter (var x,y: integer; ScaleF: double; BlkWhite, IncludeFrame: boolean);

The method CopyToOpenPrinter is a more flexible alternative to the method PrintIt. It provides a way to create a graphical output on the currently selected printer. You may change the selected printer by assigning a proper value to the PrinterIndex property of the Printer object before calling CopyToOpenPrinter. In contrast to PrintIt, the user has to take care by himself that the printer object is already open for receiving data. This can be accomplished either by the method Printer.BeginDoc (see Delphi manual for details), or by assigning the printer output to a text file (Delphi procedure AssignPrn).

The variable parameters x and y contain the coordinates of the upper left corner of the plot in printer coordinates on entry of the routine, and return the printer coordinates of the lower right corner of the plot after the method has been finished. This feature can be used to combine several hardcopies on one page, since the x- and y-values after a first hardcopy can be partly used as inputs of the next hardcopy.

The parameter ScaleF determines the magnification factor of the printout. A factor of 1.0 creates an output which has roughly the size of the screen image. If the parameter BlkWhite is set to TRUE, the colors of the plot are suppressed and the plot is printed in black and white. This is normally the best way to proceed with B&W printers. The parameter IncludeFrame determines whether the frame of the component is included in the printout.

Example: The following code snippet shows a short example how to mix several graphics and some text on one printer page.
if PrinterDialog1.Execute then
  Printer.Title := 'Test';
  Printer.Canvas.TextOut (300,180,'This is some text');
  Printer.Canvas.TextOut (300,380,'Another text line');
  x := 100;
  y := 520;
  Plot3D1.CopyToOpenPrinter (x,y, 0.8, true);   { the first plot }
  Printer.Canvas.TextOut (300,y+50,'Yet another line of text');
  x := 300;
  y := y+280;
  Plot3D1.CopyToOpenPrinter (x,y, 0.4, true);  { the second plot }

Hint: When printing to Adobe Distiller, release 7.0 or later, you have to specify the property Title of the printer (Printer.Title = 'Any Title'), otherwise the Adobe printer driver will crash.

Last Update: 2012-Oct-20