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

问题描述:

我没有编程背景,这是我的第一枪。我写了一个应该在结果表上打印的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使用像素来获得坐标,但纸张的尺寸以英寸或厘米为单位。 我真的很困惑。我感谢任何帮助。

+3

由于您没有编程背景......一些提示。不错,但由于您明确使用MyPrinter对象,所以使用“with..do”构造是多余的。摆脱... ..因为他们只是让生活变得艰难,模糊你的意图,并混淆Code Insight。使用一致的2字符缩进。 – 2010-05-11 23:18:46

+1

“使用一致的2字符缩进。” 甚至更​​好:使用代码格式化程序,因此您不必手动执行。 – dummzeuch 2010-05-12 09:21:54

@Milad我建议你使用像Quick Report这样的报告组件(随德尔福的旧版本一起提供,并且非常易于使用)或FreeReport(它是免费的),使您的任务更轻松。

更多信息检查论文链接

如果你想不组件德尔福直接打印

在这里我留下几个环节,可以帮助。

+1

换句话说,看看Delphi版本中捆绑的任何报告生成器:例如,它可能是ReportBuilder。如果你想花一些钱(而且你不应该做一次性工作),你可能想看看FreeReport的大哥FastReport ... – 2010-05-12 06:12:19

边使用报告工具是一个好主意,如果你确实想自己做,你可以。我这样做是为了在我们的许可应用程序中打印自定义纸张。关键是要知道纸张的大小,并使用打印机的PageHeight和PageWidth属性来解决这个问题。对于A4纸,我选择使用297毫米×210毫米,由此我能够计算出我想要的东西。该计算是这样完成的:

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); 

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