2013-06-05 14 views

risposta

7

si utilizza la funzione WinAPI Escape, passandogli il Printer.Canvas.Handle come primo parametro e PASSTHROUGH come parametro 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 

Escape è definito nell'unità Windows. Nota è necessario chiamare Printer.StartPage prima di utilizzare questa funzione per preparare il driver della stampante a ricevere il contenuto.

+0

In Delphi XE3 Printer.Canvas.Handle potrebbe essere Printer.Canvas.BufferHandle? –

+0

In VCL.Printers, è 'Printer.Canvas.Handle', che è' HDC' della stampante. Non vedo 'Canvas.BufferHandle' nella documentazione ovunque. Se non stai utilizzando il VCL, dovresti dirlo e aggiungere il tag FireMonkey appropriato alla tua domanda. :-) Ho appena trovato 'BufferHandle', e no; questo è un 'THandle', e' Escape' sta cercando un handle per il contesto di un dispositivo ('HDC'). –

+0

Guardando il sorgente per 'FMX.Printer.Win.pas', c'è un' Canvas' definito per 'TPrinter'. Non so se è disponibile un HDC compatibile con Windows (ne dubito), ma potresti essere in grado di usare 'Printer.Handle', che è un HDC. Non so se funzionerà con 'Escape' o no, perché non l'ho provato. –