在线急求!!!求教Delphi中如何实现票据的打印,即点(像素)和厘米的换算关系!!!!(100分)

  • 主题发起人 主题发起人 zhi_liao
  • 开始时间 开始时间
Z

zhi_liao

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要作一个票据的打印程序,有个问题就是在打印时如何换算点和厘米的关系!各位大侠请多帮忙!!!我的QQ56361661欢迎语音聊。谢谢!!!!!急求!!!!
 
function GetPixelsPerInchX: Integer;
begin
Result := GetDeviceCaps(Printer.Handle, LOGPIXELSX)
end;
function GetPixelsPerInchY: Integer;
begin
Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY)
end;
1厘米=100*GetPixelsPerInchY/25.4 像素 打印机的Y方向。
1厘米=100*GetPixelsPerInchX/25.4 像素 打印机的X方向。
 
给个我刚写的代码,打印机上调试通过,可以精确定位到毫米。
用offsetX,offsetY调整打印偏移量,单位为毫米。
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
if PrinterSetupDialog1.Execute then
begin
prtX:=GetDeviceCaps(printer.Handle,LOGPIXELSX);
memo1.Lines.Add('打印机水平分辨率LOGPIXELSX='+inttostr(prtX));
prtY:=GetDeviceCaps(printer.Handle,LOGPIXELSY);
memo1.Lines.Add('打印机垂直分辨率LOGPIXELSY='+inttostr(prtY));
paperW:=GetDeviceCaps(printer.Handle,PHYSICALWIDTH);
memo1.Lines.Add('打印纸的实际宽度PHYSICALWIDTH='+inttostr(paperW)+' ('+inttostr(round(paperW/prtX))+')inch');
paperH:=GetDeviceCaps(printer.Handle,PHYSICALHEIGHT);
memo1.Lines.Add('打印纸的实际高度PHYSICALHEIGHT='+inttostr(paperH)+' ('+inttostr(round(paperH/prtY))+')inch');
prtLeft:=GetDeviceCaps(printer.Handle,PHYSICALOFFSETX);
memo1.Lines.Add('实际可打印区域的物理左边距PHYSICALOFFSETX='+inttostr(prtLeft));
prtTop:=GetDeviceCaps(printer.Handle,PHYSICALOFFSETY);
memo1.Lines.Add('实际可打印区域的物理上边距PHYSICALOFFSETY='+inttostr(prtTop));
memo1.Lines.Add('Printer.PageWidth='+inttostr(Printer.PageWidth));
memo1.Lines.Add('Printer.PageHeight='+inttostr(Printer.PageHeight));
end;
inifile:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'config.ini');
OX:=inifile.ReadInteger('print','offsetX',0);
OY:=inifile.ReadInteger('print','offsetY',0);
memo1.Lines.Add('offsetX='+inttostr(OX));
memo1.Lines.Add('offsetY='+inttostr(OY));
end;
 
//毫米单位转换为英寸单位
function MmToInch(Length: Extended): Extended;
begin
Result := Length/25.4;
end;
//英寸单位转换为毫米单位
function InchToMm(Length: Extended): Extended;
begin
Result := Length*25.4;
end;

=============
with Printerdo
begin
Canvas.Font.Size:=12;
wordHeight:=Canvas.TextHeight('字');
wordWidth:=Canvas.TextWidth('字');
begin
DOC;
With Canvasdo
begin
x:=20+OX;
y:=30+OY;
s:='这行文本将打印在20,30mm处';
TextOut(round(prtX*MmToInch(x)),round(prtX*MmToInch(y)),s);
end;
EndDoc;
end;
 
难道的 每一个控件都这个样进行 编辑吗
 
象素和厘米的换算可以根据打印机的那里面来换算撒,哈哈,打印程序有点复杂,写不来,帮你顶哈!
 
多人接受答案了。
 
后退
顶部