如果你想自己用Delphi編寫一個打印程序那麼下面這些技巧或許對你有所幫助
獲取顯示當前打印機的分辨率
Windows下的打印分辨對打印程序有著至關重要的作用如果你想知道打印機的分辨率請在程序中加入一行
ShowMessage(′水平分辨率′+inttostr(GetDeviceCaps(printer HandleLOGPIXELSX))+chr()+′垂直分辨率:′+ inttostr(GetDeviceCaps(printerHandleLOGPIXELSY)));
結果就一目了然了
將結果直接送到打印機
Delphi提供了兩種打印方式一是將結果輸送到Form再調用Form的print方法將結果輸送到打印機二是將結果直接輸送到打印機如果你采用第一種方式則無論你怎樣調整Form的PrintScal屬性打印出來的東西也不會讓你滿意因此建議采用第二種方式
盡量不要使用AssignPrn
盡管AssignPrn簡化了文本打印操作使輸出到打印機像輸出到文件一樣簡單但簡單帶來的是一系列的不方便你無法知道當前打印的行數無法准確控制行距無法靈活改變字體字形等等還是用打印機的Canvas屬性進行打印吧
用打印機的點數做度量單位
如果想讓打印程序在任何打印機上都能正常地打印你就必須改變你的度量單位如果采用固定的度量不同分辨率的打印效果是不同的舉例來講printerCanvasrectangle()在×的佳能SP上能打出一個英寸寬英寸高的矩形但在×的惠普L上只能打出英寸寬英寸高的矩形使用打印機的點數做為度量單位是一個明智的選擇具體做法如下
Var PointX
PointY:integer;
PointX:=GetDeviceCaps(printerHandle
LOGPIXELSX);
PointY:=GetDeviceCaps(printerHandle
LOGPIXELSX);
printerCanvasrectangle(
PointX*
PointY*
)
這樣無論你使用什麼樣的打印機都能得到一個英寸寬英寸高的矩形
添加打印程序單元
盡管Delphi在生成窗體時會自動在USES部分加入許多程序單元但打印程序單元(Printers)卻不在之列要想使打印機正常工作和程序不出錯你還是老老實實手工給它加上吧
From:http://tw.wingwit.com/Article/program/Delphi/201311/24867.html