1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| procedure DirectPrint(const szCB: String; const szTitre: String = '');
var
Device, Driver, Port: Array[0..255] of WideChar;
hDeviceMode, hPrinter: THandle;
pDefault: PPrinterDefaults;
DocInfo: TDocInfo1;
Buffer: Array[0..65535] of AnsiChar;
nTaille, nTailleEcrite: Cardinal;
begin
nTaille := Length(szCB);
StrPCopy(@Buffer, AnsiString(szCB));
if(Printer.Printers.Count > 0) and (Printer.PrinterIndex > -1) then
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
pDefault := AllocMem(SizeOf(pDefault^));
try
with pDefault^ do
begin
pDataType := nil;
pDevMode := nil;
DesiredAccess := PRINTER_ACCESS_USE;
end;
// Accès à l'imprimante.
if OpenPrinter(@Device, hPrinter, pDefault) then
begin
try
DocInfo.pDocName := PWideChar(IfThen(szTitre = '', Printer.Title, szTitre));
DocInfo.pOutputFile := nil;
DocInfo.pDatatype := 'RAW';
// Début document.
if StartDocPrinter(hPrinter, 1, @DocInfo) <> 0 then
begin
try
// Début page.
if StartPagePrinter(hPrinter) then
begin
if not WritePrinter(hPrinter, @Buffer, nTaille, nTailleEcrite) then
AddLog('Erreur WritePrinter (' + Printer.Printers[Printer.PrinterIndex] + ') a échoué !' + #13#10 + SysErrorMessage(GetLastError));
end
else
AddLog('Erreur StartPagePrinter (' + Printer.Printers[Printer.PrinterIndex] + ') a échoué !' + #13#10 + SysErrorMessage(GetLastError));
finally
EndDocPrinter(hPrinter);
end;
end
else
AddLog('Erreur StartDocPrinter (' + Printer.Printers[Printer.PrinterIndex] + ') a échoué !' + #13#10 + SysErrorMessage(GetLastError));
finally
ClosePrinter(hPrinter);
end;
end
else
AddLog('Erreur : l''accès à l''imprimante (' + Printer.Printers[Printer.PrinterIndex] + ') a échoué !' + #13#10 + SysErrorMessage(GetLastError));
finally
FreeMem(pDefault);
end;
end
else
AddLog('Erreur : pas d''imprimante sélectionnée !');
end; |
Partager