Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Ändern der Druckeinstellungen beim Drucken von PRN-Dateien

  Alt 7. Apr 2011, 13:44
Also, was du hier an Code präsentierst, ist einfach unterirdisch. Kein wunder, dass dir keiner hilft (weil das eigentlich gar nicht geht!)
Sorry, aber das musste ich vorher loswerden.

Hier mal eine Routine, die auch nachvollziehbar und startbar ist:
Delphi-Quellcode:
uses Printers, WinSpool;

procedure PrintTest;
const cBUFSIZE = 1000;
var Device, Driver, Port:PAnsiChar;
    hDeviceMode, hPrinter, BytesWritten:Cardinal;
    DocInfo : TDocInfo1;
    f:File;
    sFileName:string;
    Buffer:Pointer;
    Count:integer;
    stop:boolean;
    DevMode : PDeviceMode;
begin
  Driver:=nil;
  Port:=nil;
  Printer.PrinterIndex := 0; //einen Drucker auswählen
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);

  DevMode := GlobalLock(hDeviceMode);
  DevMode^.dmDefaultSource:=1; // <- Versuch mal hier den Schacht einzustellen.

  if WinSpool.OpenPrinter(@Device, hPrinter, nil) then begin
    DocInfo.pDocName := 'C:\temp\Druckdatei.prn'; //die Datei, die an einen Drucker weitergeleitet werden soll
    DocInfo.pOutputFile := nil;
    DocInfo.pDatatype :='RAW';

    StartDocPrinter(hPrinter, 1, @DocInfo);
    StartPagePrinter(hPrinter);

    //die PRN-Datei mit WritePrinter ausdrucken:
    System.AssignFile(f, sFileName);
    try
      Reset(f, 1);
      GetMem(Buffer, cBUFSIZE);
      stop:=false;
      while not Eof(f) and not stop do begin
        Blockread(f, Buffer^, cBUFSIZE, Count);
        if Count > 0 then begin
          if not WritePrinter(hPrinter, Buffer, Count, BytesWritten) then begin
            EndPagePrinter(hPrinter);
            stop:=true;
          end;
        end;
      end;
      FreeMem(Buffer, cBUFSIZE);
    finally
      System.CloseFile(f);
    end;
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  end;
end;
  Mit Zitat antworten Zitat