2013-06-05 41 views

回答

7

使用WinAPI函数Escape,将Printer.Canvas.Handle作为第一个参数,将PASSTHROUGH作为nEscape参数传递给它。

var 
    YourCommand: String; 
begin 
    YourComamnd := 'Your command here'; 

    if Escape(Printer.Canvas.Handle, 
       PASSTHROUGH, 
       Length(YourCommand), 
       PChar(YourCommand), 
       nil) <> 0 then 
    // Handle return value (listed in docs link above) 
    else 
    // send next command 

EscapeWindows单元定义。请注意,在使用此功能之前,您必须先拨打Printer.StartPage,以准备打印机驱动程序接收内容。

+0

在Delphi XE3 Printer.Canvas.Handle会是Printer.Canvas.BufferHandle吗? –

+0

在VCL.Printers中,它是'Printer.Canvas.Handle',它是打印机的'HDC'。我在任何地方都看不到'Canvas.BufferHandle'。如果你不使用VCL,你应该这样说,然后在你的问题中添加相应的FireMonkey标签。 :-)刚刚找到'BufferHandle',并且没有;这是'THandle','Escape'正在寻找设备上下文('HDC')的句柄。 –

+0

查看'FMX.Printer.Win.pas'的源代码,为'TPrinter'定义了一个'Canvas'。我不知道它是否具有与Windows兼容的HDC(我怀疑它是否可用),但是您可以使用它所说的HDC的Printer.Handle。我不知道它是否适用于'Escape',因为我没有尝试过。 –