接手一程序,有固定格式票据打印(套打),现在发票格式变了,要重新算位置,看了以前的程序,部分打印代码如下:
procedure TChargeForm.PrintReceipt;
var  
  NPixX,NPixY:Integer;
  i,m,j:Integer;
  nx,ny:Integer;
  hei:Single;
  rhei,rHeight,rWid:Single;
  str:string;
  ItemName:string;
begin
  if iSysWorkMode = 0 then
    str := strPrioReceipt
  else
    str := strCurReceipt;
  nx:=-5;
  ny:=0;
  hei:=0.295;
  rhei:=0.3;
  rWid:=1.5;
  rHeight:=2.8;
  printer.PrinterIndex:=-1;
  printer.Orientation:=poPortrait; //纵向打印
  NPixX:=GetDeviceCaps(printer.Handle,LOGPIXELSX);
  NPixY:=GetDeviceCaps(printer.Handle,LOGPIXELSY);
  printer.BeginDoc;
  printer.Canvas.Font.Name:='宋体\0';
  printer.Canvas.Font.Height:=28;
  printer.Canvas.TextOut(trunc(NPixX*0.42)+nx,trunc(NPixY*0.7)+ny,ESickName.Text);
  for i:=0 to ItemCount-1 do
  begin
    if  Trunc(Array_Item[i][0])<8  then
      printer.Canvas.TextOut(trunc(NPixX*0.7)+nx,trunc(NPixY*(0.5+(2+Array_Item[i][0])*hei))+ny,Format('%.2f',[Array_Item[i][1]]));
    if  (Trunc(Array_Item[i][0])>=8) and (Trunc(Array_Item[i][0])<14)then
      printer.Canvas.TextOut(trunc(NPixX*2.4)+nx,trunc(NPixY*(0.5+(Array_Item[i][0]-5)*hei))+ny,Format('%.2f',[Array_Item[i][1]]));
    if  Trunc(Array_Item[i][0])=14 then
    begin
      printer.Canvas.TextOut(trunc(NPixX*1.65)+nx,trunc(NPixY*(0.5+(Array_Item[i][0]-5)*hei))+ny,'TX');
      printer.Canvas.TextOut(trunc(NPixX*2.4)+nx,trunc(NPixY*(0.5+(Array_Item[i][0]-5)*hei))+ny,Format('%.2f',[Array_Item[i][1]]));
    end;
    if  Trunc(Array_Item[i][0])=15 then
    begin
      printer.Canvas.TextOut(trunc(NPixX*0.04)+nx,trunc(NPixY*(0.5+(Array_Item[i][0]-5)*hei))+ny,'其 他');
      printer.Canvas.TextOut(trunc(NPixX*0.65)+nx,trunc(NPixY*(0.5+(Array_Item[i][0]-5)*hei))+ny,Format('%.2f',[Array_Item[i][1]]));
    end;
  end;
有许多不解,期中
printer.Canvas.TextOut(trunc(NPixX*0.42)+nx,trunc(NPixY*0.7)+ny,ESickName.Text);中trunc(NPixX*0.42)是用来干吗的,0.42又从何处所得?
同样上语句用的0.7、1.65等等数字从何来?我想肯定有算法?
请做过这种打印的朋友帮忙将上边的代码给我解释一下,尤其是那些数字的算法?
谢谢!!!

解决方案 »

  1.   

    我的票据格式是24cmX14cm的,用的是espon的LQ-590K打印机。
      

  2.   

    trunc估计是取整数的函数吧?
    0.7、1.65等等数字,肯定是经过调试确定下来的最佳数字,来确定位置的
      

  3.   

    我主要是不明白为什么要用“NPixX*0.42”,这是何种换算方式?
      

  4.   

    “NPixX*0.42”无疑是和打印图像有关,
    你改用其他数据也可以打印,只是尺寸改变.
    0.42是根据图形所需大小凑出来的一个比例值.