如何在正确的坐标处打印文本字段?
我没有编程背景,这是我的第一枪。我写了一个应该在结果表上打印的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使用像素来获得坐标,但纸张的尺寸以英寸或厘米为单位。 我真的很困惑。我感谢任何帮助。
@Milad我建议你使用像Quick Report这样的报告组件(随德尔福的旧版本一起提供,并且非常易于使用)或FreeReport(它是免费的),使您的任务更轻松。
更多信息检查论文链接
如果你想不组件德尔福直接打印在这里我留下几个环节,可以帮助。
换句话说,看看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);
然后,这一次允许多条线路适合。 这不完整,但应该是自定义打印的良好开端。
由于您没有编程背景......一些提示。不错,但由于您明确使用MyPrinter对象,所以使用“with..do”构造是多余的。摆脱... ..因为他们只是让生活变得艰难,模糊你的意图,并混淆Code Insight。使用一致的2字符缩进。 – 2010-05-11 23:18:46
“使用一致的2字符缩进。” 甚至更好:使用代码格式化程序,因此您不必手动执行。 – dummzeuch 2010-05-12 09:21:54