我设的X、Y都为500时,打印出来的XY都很小,感觉比象素单位还小?

解决方案 »

  1.   

    关键字:TPrinter类 
      TPrinter类中封装了Windows打印机的接口。 类关系 TObject   使用TPrinter对象可以执行应用程序中的任何打印操作。可以在Printers单元中通过调用Printer函数来获得一个TPrinter 对象。为了决定如何显示窗体的打印图像,可以使用Tform组件的PrintScale属性。 
      在一个文本变量或一个打印机画布准备好后就可以进行打印工作了。打印工作一直进行到调用EndDoe过程。显示在PrintManager(或网络头页)上的题目由Title 属性决定。如果想开始打印工作可以调用BeginDoc方法。结束一个成功打印的工作需要调用EndDoc过程。如果出现问题需要中断打印可以调用Abort方法。 属性列表 
    Aborted 中断打印 
    Canvas 当前打印页的表面 
    Capabilities 指示一个打印设备驱动器的当前设置 
    Copies 指定打印的份数 
    Fonts 列出当前打印机支持的字体 
    Handle 提供访问打印机对象句柄的能力 
    Orientation 决定打印工作在页上的方向 
    PageHeight 指示当前打印页的像素高度 
    pateNurnber 指示当前打印页 
    PageWidth 指示当前打印页的像素宽度 
    Printerlndex 在Printers属性中列出的是当前打印机 
    Printers 列出所有在Windows中安装的打印机 
    printing 指示打印工作正在进行 
    Title 显示在Ptint Manager中主网络头页中的文本 方法列表 
    ~TPrinter 删除一个打印机实例 
    Abort 中断打印 
    BeginDoc 送一个打印工作到打印机中 
    EndDoc 结束当前打印工作并关闭文本文件变量 
    GrtPrinter 取回当前打印机 
    NewPage 开始一个新页 
    SetPrinter 指定一个打印机作为当前打印机 
    TPrinter 创建一个打印机 
    属性 
    TPrinter::Aborted 
      指示当前是否用户中断了打印,从而调用方法 
    __property bool Aborted ={read = FAborted,nodefalt} ; 
      如果属性Aborted为真,则表示打印工作已经中断。如果为假值,则表示用户并没有中断打印进程。 TPrinter::Canvas 
      表示当前打印页的表面。 
    __property Graphics : : TCanvas * Canvas = { read = GetCanvas } ; 
      属性Canvas表示一页的打印表面。使用Canvas对象的Brush,Font 和Pen 属性可以决定如何绘制和显示页。一些打印机不支持图像,因此,对这些打印机调用Draw,StretchDraw或CopyRect方法将会失败。 TPrinter::Capabilities 
      指示一个打印设备驱动器的当前设置。 
    __property TPrinterCajpabilities Caoabukutues ={read = FCapabities , nodefault} ; 
      属性Capabilities 包含了打印机有兼容性,它指定了打印的方向,页数和是否校对。 TPrinter::Copies 
      指定打印的份数。 
    __property int Copies = {read = GetNumCopies, write =SetNumCopies, nodefault } ; 
      属性Copies中指定打印的份数。 TPrinter::Fonts 
      列出当前打印机支持的字体。 
    __property Classes ;;TStrings * Fonts = { read =GetFonts } ; 
      使用Fonts属性可以获得当前打印机支持的字体列表。列表中总是包含有TrueType字体,即使打印机中不包含这种字体,因为Windows Graphies Device Interface(GDI)在打印机使用时可以准确地绘制这种字体。 TPrinter::Handle 
      提供访问打印机对象句柄的能力。 
    __property HdC Handle = { read =GetHandle , node fault }; 
      使用Handle 属性可以获得对打印机对象句柄有访问。 TPrinter::Orientation 
      决定打印工作在页上的方向,垂直或水平。 
    __property TpinterOrientation Orientation = { read = GetPrientatiion, write = SetOrienatiion ,nodefault } 
      使用Orientation 属性可以决定打印机打印的方向。Onienation属性值只能是TPrinterOrientation 类型。下表中列出了属性可能值: 
    TPrinter::PageHeight 
      指示当前打印页的像素高度。 
    __property int PageHeight = {read = GetPageHeight ,nodefault } ; 
      在属性PageHeight中可以找到当前打印页的像素高度。 TPrinter::PageNumger 
      指示当前打印页。 
    __property int PageNumber = { read = FPageNumber , nodefault } ; 
      在属性PageNumber中可以获得当前打印的页码。在调用NewPage方法后属性PageNumber将加1。当页结束处输入回车并写入文本变量时,属性PageNumber也将加1 。 TPrinter::PageWidth 
      指示当前打印页的像素宽度。 
    __property int PageWidth = {read = GetPageWidth , modefault } ; 
      在属性PsheWifyh中可以找到当前打印页的像素宽度。 TPrinter::Printerlndex 
      指定在Printers属性中列出的打印机是当前打印机。 
    __property int Printerlndex = { read =GetPrinterlndex , write = SetPrinterlndex ,nodefault } ; 
      属性Printerlndex指定当前打印机。如果改变了本属性值将自动调用EndDoc方法。如果想选择缺省的打印机,可以将属性Printerlndex 设置为 — 1 。在 Printers 属性中列出了安装的打印机。当前打印机支持的字体列表在Fonts属性中。 TPrinter::Printers 
      列出所有在Windows中安装的打印机。 
    __property Classes : : TStrings * Printers = {read =GePrinters } ; 
      在Printers属性中列出了所有在Windows 中安装的打印机。属性Printerlndex 指定了当前选择的打印机。当前打印机支持的字体列表在Fonts属性中。 TPrinter::Printing 
      指示打印工作正在进行。 
    __property bool Printing = {read = FPrinting , nodefault } ; 
      使用Printing属性可以决定是否正在进行一项打印工作。如果应用程序中调用了BeginDoc方法并在调用EndDoc方法(或Abort方法)之前将把Printing属性设置为真值。 
    TPrinter::Title 
      决定显示在Print Manager中和网络头页中的文本。 
    __property Systen : : AndiString Title = { read = FTitle , wrete = FTitle } ; 
      属性Title在Print Manager由Windows使用,也作为网络的头页。 方法 
    TPrinter : : ~TPrinter 
      删除一个打印机实例。 
    __fastcall virtual ~TPrinter ( void ) ; 
      一般不直接调用~TPrinter方法。打印机对象将自动创建和删除。当调用~TPrinter方法时,它将检查是否打印工作都已经结束。如果都结束了就释放资源。例如句柄、字体和画布等,最后关闭打印机并调用继承的析构函数。 TPrinter::Abort 
    void __fastcall Abort(void); 
      中断打印,放弃未打印数据。 
      使用Abort方法可以在打印工作完成前中断打印,否则将使用EndDoc方法。调用Abort方法后设备将设置为下一个打印工作。 TPrinter::BeginDoc 
    _void __fastcall BeginDoc(void); 
      送一个打印工作到打印机中。 
      调用BeginDoc可以初始化一个打印工作。如果打印工作被成功送入,应用程序将调用EndDoc方法结束打印。打印工作只有在调用EndDoc方法后才实际开始。 TPrinter::EndDoc 
    void __fastcall EndDoc(void); 
      结束当前打印工作并关闭文件变量。 
      调用EndDoc方法将结束打印工作(并关闭当前打开的文体)。打印工作将在EndDoc方法调用结束后开始。在应用程序中调用EndDoc方法后,打印机开始打印。将一个打印工作成功送入打印机后调用EndDoc方法。如果打印工作没成功,则调用Abort方法。 TPrinter::GetPrinter 
    void __fastcall GetPrinter(char* ADevice,char* ADriver,char* APort,int& ADeviceMode); 
      取回当前打印机。 
      不需要直接调用GetPrinter方法。可以通过访问Printers属性数组中的打印机来获得。如果想了解更多的信息,可以参见Win32Developer's Reference(WIN32::HLP)中的CreateDC函数。 TPrinter::NewPage 
    void __fastcall NewPage(void); 
      开始一个新页,并将PageNumber属性值加1。 
      使用NewPage方法将强制在打印机的新页上继续打印工作。 
      NewPage方法将把PageNumber属性值加1。同时将把Canvas对象的Pen属性设置成(0,0)。 TPrinter::SetPrinter 
    void __fastcall SetPrinter(char* ADevice,char* ADriver,char* APort,int ADeviceMode); 
      指定一个打印机作为当前打印机。 
      不直接调用SetPrinter方法。可以通过访问Printers属性数组中的打印机来设置。如果想了解更多的信息,可以参见Win32Developer's Reference(WIN32.HLP)中的CreateDC函数。 TPrinter::TPrinter 
    __fastcall TPrinter(void); 
      创建一个打印机。 
      不能直接调用TPrinter方法。TPrinter方法将由Printer函数自动调用。方法为打印机分配内存,并调用继承的构造方法。然后设置正确的驱动器、设备和端口. 
      

  2.   

    你必须先得到打印机的实际尺寸:
    var
      pointx,pointy:integer;
      pointx:=getdevicecaps(printer.handle,logpixelsx);
      pointy:=getdevicecaps(printer.handle,logpixelsy);
      printer.canvas.TextOut(X*pointx,Y*pointy,Text);