以前做的发票打印程序都用PRINTER。定位还可以,前几天看了一个商业程序。发票的格式可以自己建立、设定的。觉得不错。
请问DELPHI里用哪种报表控件干这个比较不错?
定位准的。谢谢各位了!

解决方案 »

  1.   

    做发票不要用什么报表空件,用Delphi直接输入,比用什么报表来的都快
      

  2.   

    unit uint2;interface
    uses printers, Variants, Graphics, SysUtils, Controls, Windows;function GetOffSetX: Integer;
    function GetOffSetY: Integer;
    function VPointsPerInch: Integer;
    function HPointsPerInch: Integer;
    function XPointToMm(Pos: Integer): Extended;
    function YPointToMm(Pos: Integer): Extended;
    function InchToMm(Length: Extended): Extended;
    function MmToInch(Length: Extended): Extended;
    function CharHeight: Word;
    function xMmtoPoint(mm:Extended):extended;overload;
    function yMmToPoint(mm:Extended):Extended;overload;
    function xMmtoPoint(mm:integer):extended;overload;
    function yMmToPoint(mm:integer):Extended;overload;
    procedure PrintToPaper(x,y:Extended;text:string);overload;
    procedure PrintToPaper(x,y:integer;text:string);overload;
    procedure PrintToPaperV(x,y:Extended;text:string);overload;
    procedure PrintToPaperV(x,y:integer;text:string);overload;implementation
    ///取得纸张的横向偏移量-单位:点
    function GetOffSetX: Integer;
    begin
      Result := GetDeviceCaps(Printer.Handle, PhysicalOffSetX);
    end;
    //取得纸张的纵向偏移量-单位:点function GetOffSetY: Integer;
    begin
      Result := GetDeviceCaps(Printer.Handle, PhysicalOffSetY);
    end;//取得纵向方向每英寸打印机的光栅数function VPointsPerInch: Integer;
    begin
      Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    end;
    //取得水平方向每英寸打印机的点数function HPointsPerInch: Integer;
    begin
      Result := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    end;//横向点单位转换为毫米单位function XPointToMm(Pos: Integer): Extended;
    begin
      Result := Pos * 25.4 / HPointsPerInch;
    end;//纵向点单位转换为毫米单位function YPointToMm(Pos: Integer): Extended;
    begin
      Result := Pos * 25.4 / VPointsPerInch;
    end;//英寸单位转换为毫米单位function InchToMm(Length: Extended): Extended;
    begin
      Result := Length * 25.4;
    end;//毫米单位转换为英寸单位function MmToInch(Length: Extended): Extended;
    begin
      Result := Length / 25.4;
    end;
    ///字体高度////////////////////////////////////////////////////////////////
    function CharHeight: Word;
    var
      Metrics: TTextMetric;
    begin
      GetTextMetrics(Printer.Canvas.Handle, Metrics);
      Result := Metrics.tmHeight;
    end;//X毫米/打印点////////////////////////////////////////////////////////////////
    function xMmtoPoint(mm:Extended):extended;
    begin
       Result :=mm*HPointsPerInch/25.4;
    end;//Y毫米/打印点/////////////////////////////////////////////////
    function yMmToPoint(mm:Extended):Extended;
    begin
      Result :=mm*VPointsPerInch/25.4;
    end;
    //X毫米/打印点////////////////////////////////////////////////////////////////
    function xMmtoPoint(mm:integer):extended;
    begin
       Result :=mm*HPointsPerInch/25.4;
    end;//Y毫米/打印点/////////////////////////////////////////////////
    function yMmToPoint(mm:integer):Extended;
    begin
      Result :=mm*VPointsPerInch/25.4;
    end;
    procedure PrintToPaper(x,y:Extended;text:string);
    var
    ax,ay:integer;
    begin
      ax:=Round(xMmtoPoint(x))-GetOffSetX ;
      ay:=Round(yMmToPoint(y))-GetOffSetY ;
      Printer.Canvas.TextOut(ax,ay,text);
    end;
    procedure PrintToPaper(x,y:integer;text:string);
    var
    ax,ay:integer;
    begin
      ax:=Round(xMmtoPoint(x))-GetOffSetX ;
      ay:=Round(yMmToPoint(y))-GetOffSetY ;
      Printer.Canvas.TextOut(ax,ay,text);
    end;procedure PrintToPaperV(x,y:Extended;text:string);
    var
    ax,ay:integer;
    begin
      ax:=Round(xMmtoPoint(x))-GetOffSetY ;
      ay:=Round(yMmToPoint(y))+GetOffSetX ;
      Printer.Canvas.TextOut(ax,ay,text);
    end;
    procedure PrintToPaperV(x,y:integer;text:string);
    var
    ax,ay:integer;
    begin
      ax:=Round(xMmtoPoint(x))-GetOffSetY ;
      ay:=Round(yMmToPoint(y))+GetOffSetX  ;
      Printer.Canvas.TextOut(ax,ay,text);
    end;end.
      

  3.   

    zjm107(可乐加冰) [我喜欢不用控件代码手绘图!]
    你的方法不错
    可 打印预览怎么搞啊!
    还有要是连续打印多页那?(代打印预览)
    //想得分去
    http://expert.csdn.net/Expert/TopicView1.asp?id=2077304