如何在正确的坐标处打印文本字段?

时间:2010-05-11 21:23:30

标签: delphi printing

我没有任何编程背景,这是我的第一次拍摄。我写了一个应该在结果表上打印的Delphi程序。我在一个研究所工作,我们必须每两个月建立数百个结果表。这样做真的很难,不同的笔迹也是一个重要的问题。我有这段代码:

if PrintDialog.Execute() then
    begin
      with MyPrinter do
      begin
          MyPrinter.BeginDoc();//Start Printing

          //Prints First Name
          MyPrinter.Canvas.TextOut(FirstNameX,FirstNameY,EditFirstName.Text);

          //Prints Last Name
          MyPrinter.Canvas.TextOut(LastNameX,LastNameY,EditLastName.Text);

          //Prints Level
          MyPrinter.Canvas.TextOut(LevelX,LevelY,EditLevel.Text);

          //Prints Date
          MyPrinter.Canvas.TextOut(DateX,DateY,MEditDate.Text);

          //Prints Student Number
          MyPrinter.Canvas.TextOut(StdNumX,StdNumY,EditStdnumber.Text);
          ....
          MyPrinter.EndDoc();//End Printing
        end;
      end;

我无法获得正确的坐标以便正确打印。我错过了什么吗?如何设置正确的坐标?您知道TPrinter使用像素来获取坐标,但纸张以英寸或厘米为单位进行测量。 我真的很困惑。我感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

@Milad我建议您使用像Quick Report这样的报告组件(随旧版本的delphi一起使用,并且非常易于使用)或FreeReport(它是免费的)以使您的任务更容易。< / p>

了解更多信息,请查看这些链接

如果你想在没有组件的情况下直接从delphi打印,我会留下一些可以提供帮助的链接。

答案 1 :(得分:1)

使用报告工具是一个好主意,如果你真的想自己做,你可以。我这样做是为了在我们的许可申请中打印到自定义纸张。关键是要知道纸张的大小,并使用打印机的PageHeight和PageWidth属性从中进行处理。对于A4纸,我选择使用297mm×210mm,从中我能够计算出我想要的东西。因此计算完成:

nStartPos := 210-141;
nUserColX := muldiv(localPrinter.PageWidth, 187, 297);
nUserColY := muldiv(localPrinter.PageHeight, nStartPos, 210);

完成nStartPos变量以在特定地点开始,然后使用nUserColY一次向下移动一行,如下所示:

nUserColY := nUserColY - localPrinter.canvas.font.height - (localPrinter.canvas.font.height div 8);

然后,这样可以一次允许多条线适合。 这不完整,但应该是自定义打印的良好开端。