![]() |
.prn dateien ausdrucken
Ich weiß, dass es diese Frage schon mehrmals hier gab, ich konnte jedoch mit allen Beispielen und Ideen nichts anfangen. Sie haben einfach nicht funktioniert !
Ich zeig euch mal meinen letzten Vesuch :
Delphi-Quellcode:
uses
Printers, Winspool; function SpoolFile(const FileName, PrinterName: string): Integer; var Buffer: record JobInfo: record // ADDJOB_INFO_1 Path: PChar; JobID: DWORD; end; PathBuffer: array[0..255] of Char; end; SizeNeeded: DWORD; Handle: THandle; PrtName: string; ok: Boolean; begin // Flush job to printer PrtName := PrinterName; if PrtName = '' then PrtName := Printer.Printers[Printer.PrinterIndex]; // Default printer name ok := False; if OpenPrinter(PChar(PrtName), Handle, nil) then if AddJob(Handle, 1, @Buffer, SizeOf(Buffer), SizeNeeded) then if CopyFile(PChar(FileName), Buffer.JobInfo.Path, True) then if ScheduleJob(Handle, Buffer.JobInfo.JobID) then ok := True; if not ok then Result := GetLastError else Result := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin if SpoolFile('c:\test.prn', Printer.Printers[0]) = 0 then ShowMessage('No error...'); end; Das geht auch nicht !!!! Ich werd verrückt :( Kann mir jemand helfen ? |
Re: .prn dateien ausdrucken
In meiner
![]()
Delphi-Quellcode:
Benutzt den gerade eingestellten Drucker aus "Printers.pas". Alternativ musst du nur die Zeile mit OpenPrinter ändern.
{ This function sends the given file to the currently selected printer
(Delphi's "Printer" object). } procedure SendFileToPrinter(const Filename: string; const Docname: string = ''); var hPrinter, hFile: THandle; Info: TDocInfo1; Buffer: array [0 .. 4095] of char; NumBytes: cardinal; { This function returns the device name of the currently selected printer (Delphi's "Printer" object). } function GetPrinterDeviceName: string; var szDevice, szDriver, szPort: array [0 .. 1023] of char; hDevMode: THandle; begin Printer.GetPrinter(szDevice, szDriver, szPort, hDevMode); Result := StrPas(szDevice); end; begin if not OpenPrinter(PChar(GetPrinterDeviceName), hPrinter, nil) then RaiseLastOsError; try if Docname <> '' then Info.pDocName := PChar(Docname) else Info.pDocName := PChar(Filename); Info.pOutputFile := nil; Info.pDatatype := nil; if StartDocPrinter(hPrinter, 1, @Info) = 0 then RaiseLastOsError; try if not StartPagePrinter(hPrinter) then RaiseLastOsError; try hFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0); if hFile = INVALID_HANDLE_VALUE then RaiseLastOsError; try repeat if not ReadFile(hFile, Buffer, SizeOf(Buffer), NumBytes, nil) then RaiseLastOsError; if NumBytes > 0 then if not WritePrinter(hPrinter, @Buffer[0], NumBytes, NumBytes) then RaiseLastOsError; until NumBytes = 0; finally CloseHandle(hFile); end; finally EndPagePrinter(hPrinter); end; finally EndDocPrinter(hPrinter); end; finally ClosePrinter(hPrinter); end; end; // Edit: Eben schnell noch aus der Funktion eine Prozedur gemacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz