Posted by webmaster Guido
In Reply to: Re: Printing calculated results posted by Lionel : When you say "specifying horizontal and vertical coordinates" Is this what you are talking about: : GoToXY(1,23); ------------------- For printing on specific coordinates of the paper, you use this Delphi command: Printer.Canvas.TextOut(string_to_print, X_coordinate, Y_coordinate) The entire print-routine looks a bit different though: all printing must be between the commands "Printer.BeginDoc" and "Printer.EndDoc". Here's an example: procedure TForm1.btnPrintClick(Sender: TObject); begin Printer.BeginDoc; // allways do this first try Printer.Canvas.Font.Name := 'Arial'; Printer.Canvas.Font.Size := 12; Printer.Canvas.TextOut(500, 500, 'line1-column1'); Printer.Canvas.TextOut(1500, 500, 'line1-column2'); Printer.Canvas.TextOut(500, 600, 'line2-column1'); Printer.Canvas.TextOut(1500, 600, 'line2-column2'); // more printing here... finally Printer.EndDoc; // this starts the printing end; end; Because you use coordinates that are expressed in pixels, the printout will look different from printer to printer, it depends on the printer's pixel density (dots per inch, "DPI"). For a reliable result, you go like this: - decide on the size of the topmargin and position of the column(s) in inches; |
procedure TForm1.btnPrintClick(Sender: TObject); const Col1Position = 0.8; // in inches Col2Position = 2.2; // in inches TopMargin = 1; // in inches var PixPerInchX, PixPerInchY: integer; X1, X2, Y, LineSpacing: integer; // in pixels begin Printer.BeginDoc; try with Printer.Canvas do begin PixPerInchX := GetDeviceCaps(Handle, LOGPIXELSX); PixPerInchY := GetDeviceCaps(Handle, LOGPIXELSY); X1 := Round(Col1Position * PixPerInchX); X2 := Round(Col2Position * PixPerInchX); Y := Round(TopMargin * PixPerInchY); Font.Name := 'Arial'; Font.Size := 12; LineSpacing := Round(TextHeight('X') * 1.05); // or 1.5 or 2 or whatever... TextOut(X1, Y, 'line1-column1'); TextOut(X2, Y, 'line1-column2'); Y := Y + LineSpacing; // more printing here... end; finally Printer.EndDoc; // print and advance to new page end; end;