Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#55
  Alt 25. Jun 2014, 13:37
@Natcree

Der Record ist falsch deklariert.
Natürlich funktioniert das nur, wenn ein Druckertreiber für diesen Drucker vorhanden ist und dieser auch PassThrough unterstützt.
In deinem Beispiel muss der Drucker auch noch als Standard ausgewählt sein.
Delphi-Quellcode:
type
  TPassThroughData = record
    nLen : Word;
    Data : array[0..255] of Byte;
  end;

function PrinterSupport(APrinter: TPrinter; ACommand: Integer): Boolean;
begin
  Result := (Escape(APrinter.Canvas.Handle, QUERYESCSUPPORT, SizeOf(ACommand), @ACommand, nil) > 0);
end;

function DirectPrint(APrinter: TPrinter; const s: AnsiString): Boolean;
var
  PTBlock : TPassThroughData;
begin
  Result := (Length(s) < 256);
  if Result then
  begin
    PTBlock.nLen := Length(s);
    StrPCopy(@PTBlock.Data, s);
    Escape(APrinter.Handle, PASSTHROUGH, 0, @PTBlock, nil);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Printer.BeginDoc;
  try
    if PrinterSupport(Printer, PASSTHROUGH) then
      DirectPrint(Printer, {...hier Zeichenkette für den Drucker übergeben...});
  finally
    Printer.EndDoc;
  end;
end;
  Mit Zitat antworten Zitat