Tengo unas impresoras PDF que de vez en cuando se pasan a monocromo y no hay forma de convencerlas de que vuelvan a color, y he leído que hay que fijar el printer.colormode a acPRCMColor (esto se escribe así en VBA), que es una constante que vale 2, pero el caso es que delphi no tiene esa propiedad en las TPrinter
¿Alguien sabe como hacerlo desde delphi?
Acceder a Printer.ColorMode
Comenzado por
Sergio
, may 09 2013 07:09
2 respuestas en este tema
#1
Escrito 09 mayo 2013 - 07:09
#2
Escrito 09 mayo 2013 - 08:10
Puedes hacerlo haciendo uso de la Api WinsPool de Windows amigo mio. Mira este código que hace lo que necesitas:
delphi
uses winspool; procedure SetPrinterInfo(APrinterName: PChar); var HPrinter : THandle; InfoSize, BytesNeeded: Cardinal; PI2: PPrinterInfo2; PrinterDefaults: TPrinterDefaults; begin with PrinterDefaults do begin DesiredAccess := PRINTER_ACCESS_USE; pDatatype := nil; pDevMode := nil; end; if OpenPrinter(APrinterName, HPrinter, @PrinterDefaults) then try SetLastError(0); if not GetPrinter(HPrinter, 2, nil, 0, @BytesNeeded) then begin PI2 := AllocMem(BytesNeeded); try InfoSize := SizeOf(TPrinterInfo2); if GetPrinter(HPrinter, 2, PI2, BytesNeeded, @BytesNeeded) then begin // para monocromo el valor de DMcolor es 1 //PI2.pDevMode.dmColor := 1; // para color es 2 PI2.pDevMode.dmColor := 2; PI2.pSecurityDescriptor := nil; if DocumentProperties(0, hPrinter, APrinterName, PI2.pDevMode^, PI2.pDevMode^, DM_IN_BUFFER or DM_OUT_BUFFER) = IDOK then begin SetPrinter(HPrinter, 2, PI2, 0); end; end; finally FreeMem(PI2, BytesNeeded); end; end; finally ClosePrinter(HPrinter); end; end; procedure TForm1.Button1Click(Sender: TObject); begin SetPrinterInfo('HP 2500C Series'); TPrintDialog.Create(Self).Execute; end;
#3
Escrito 09 mayo 2013 - 11:37
Suponia que solo las win32 me ayudarían... y era cierto, menos mal que todo este código que envías ya lo tenía, solo me falta añadirle lo del ColorMode, muchas grácias poliburro, mañana lo pruebo (hoy estoy con la simulación de los karts, que es un vício).