向各位老师求教一个问题,请问delphi6怎么实现自定义打印,打印机分机光和针式两种,谢谢!
各位老师最好能说得清楚些,最好有个例子。谢谢您了!!

解决方案 »

  1.   

    是不是让用户选择要打印的字段和格式,用Fastreport啊,下一个里面有demo的!
      

  2.   

    要看你用的是什么报表控件,FASTREPORT没用过,同样的问题我前不久被QUICKREPORT折磨的死去活来
    如果你用的是QUICKREPORT,OS是2000以上的话,强烈建议你不要把QUICKREPORT的纸张类型设成CUSTOM,因为你设了也没用!应该设为DEFAULT然后再到OS中新建或是选择一种纸张
      

  3.   

    为什么自由打印就不能用打印空件,其实用空件很方便,像REPORTMACHINE就可以让用户自己设置打印格式,如果坚持要自己做将会浪费很多时间
      

  4.   

    procedure printcertificate(CertName,CertId,Name1,Sex1,BirthYear1,
       BirthMonth1,BirthDay1,Country1,identity1,Name2,Sex2,BirthYear2,
       BirthMonth2,BirthDay2,Country2,identity2,CreateYear,CreateMonth,CreateDay:String);
    var
      PrintX,PrintY,PrintStep,X,Y:Integer;
    Begin
      Printer.Orientation := poLandscape;
      PrintX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);//360
      PrintY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);//360
      Printer.Canvas.Font.Name:='楷体_GB2312';
      Printer.Canvas.Font.Size:=13;
      Printer.Canvas.Font.Style:=[];
      PrintStep:=Trunc(0.65*PrintY);
      Printer.BeginDoc;  X:=Trunc(2.5*PrintX);
      Y:=Trunc(10.65*PrintY);
      Printer.Canvas.TextOut(x,y,CertName);  X:=Trunc(5.8*PrintX);
      Printer.Canvas.TextOut(x,y,CertId);
      //X:=Trunc(4.2*PrintX);
      X:=Trunc(5*PrintX);
      Y:=Trunc((3.45+8.2)*PrintY);
      Printer.Canvas.TextOut(x,y,Name1);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,Sex1);
      Y:=Y+PrintStep+Trunc(0.1*PrintY);
      //X:=X-Trunc(0.1*PrintX);
      X:=X-Trunc(1.1*PrintX);
      Printer.Canvas.TextOut(x,y,BirthYear1);
      //X:=X+Trunc(1.35*PrintX);
      X:=X+Trunc(1.55*PrintX);
      Printer.Canvas.TextOut(x,y,BirthMonth1);
      X:=X+Trunc(1.2*PrintX);
      Printer.Canvas.TextOut(x,y,BirthDay1);
      //X:=Trunc(4.2*PrintX);
      X:=Trunc(3.9*PrintX);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,Country1);
      Y:=Y+PrintStep+Trunc(0.09*PrintY);
      Printer.Canvas.TextOut(x,y,identity1);  X:=Trunc(5*PrintX);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,Name2);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,Sex2);
      Y:=Y+PrintStep+Trunc(0.1*PrintY);
      //X:=X-Trunc(0.1*PrintX);
      X:=X-Trunc(1.1*PrintX);
      Printer.Canvas.TextOut(x,y,BirthYear2);
      //X:=X+Trunc(1.35*PrintX);
      X:=X+Trunc(1.55*PrintX);
      Printer.Canvas.TextOut(x,y,BirthMonth2);
      X:=X+Trunc(1.2*PrintX);
      Printer.Canvas.TextOut(x,y,BirthDay2);
      //X:=Trunc(4.2*PrintX);
      X:=Trunc(3.9*PrintX);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,Country2);
      Y:=Y+PrintStep;
      Printer.Canvas.TextOut(x,y,identity2);  Y:=Trunc((17.45)*PrintY);
      X:=Trunc(13.6*PrintX);
      Printer.Canvas.TextOut(x,y,CreateYear);
      X:=Trunc(15.15*PrintX);
      Printer.Canvas.TextOut(x,y,CreateMonth);
      X:=Trunc(16.15*PrintX);
      Printer.Canvas.TextOut(x,y,CreateDay);  Printer.EndDoc;End;
    这是我作结婚打印时的代码。你看看吧,有问题加QQ:270726628
      

  5.   

    对一般程序员来说激光打印跟针式打印没有什么区别。不过绘图仪就不同了……
    用Delphi的TPrinter对象就足够了。