2013-06-05 62 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',因爲我沒有嘗試過。 –