PDA

Ver la Versión Completa : Seleccionar bandeja de impresión


Minotaure
03-01-2008, 17:51:24
Hola,

Tengo una pantalla y una tabla de clientes dónde cada cliente puede tener una factura (report) dirente así cómo un número de copias e impresora por defecto. Hago la selección de la impresora y del número de copias con el PrinterSetupDialog.
El código es este:
PrinterSetupDialog1.Execute;
myPrinter := Printer;
indeximp := myPrinter.PrinterIndex;
DMArxius.TG_ClientsCLICOPIES.AsInteger := myPrinter.Copies; //Assigna el nombre de copies correctes
DMArxius.TG_ClientsCLIIMPRESSORAF1.AsString := myPrinter.Printers[indeximp]; //Assigna el nom d'impressora correcteEs decir graba a la base de datos la impresora y el número de copias seleccionado. Esto es OK.

Después a la hora de imprimir el report de la factura del cliente asigno al report (utilitzo las FastReport 4) la impresora y el número de copias que tiene seleccionado:
frxR1.PrintOptions.Copies := copies;
frxR1.PrintOptions.Printer := impressora;Todo ok, es decir me sale al impresora seleccionada y también el número de copias.

El problema es que además de impresora y número de copias también tendría que seleccionar por defecto la bandeja de la impresora. Y es aquí dónde no sé cómo se hace, ni tan siquiera grabar la propiedad que ha seleccionado con el PrinterSetupDialog, ni tampoco como configurar el Report. He buscado propiedades de Tray o algo así y no he encontrado nada.

Muchas gracias por vuestro tiempo y agradezco de antemano cualquier posible ayuda.

Si me he explicado mal o hay algo que no se entiende me lo decís.

afxe
15-05-2008, 13:30:38
Bueno, acabo de ver este post y al no tener respuesta me he dicho... más vale tarde que nunca, por si alguien está buscando algo sobre esto, por lo menos que encuentre una solución.

En el quickreport, en printersettings tienes la propiedad outputbin, para indicar la bandeja de salida. Sin embargo, algunas veces no he conseguido que la impresora responda a estos cambios en el quickreport. Acabo de realizar una función para cambiar la bandeja de una impresora pasada por parametro. Aún no lo he probado, pues estoy chapuceando en casa y no tengo una impresora multibandeja a mano, así que no os puedo asegurar que funcione:



Procedure ActivaBandeja(FPrinter: TPrinter; NumBandeja: SmallInt);
var
FDevice: PChar;
FDriver: PChar;
FPort: PChar;
DeviceMode: THandle;
DevMode: PDeviceMode;
begin
FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
DevMode := GlobalLock(DeviceMode);
if ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE) then begin
DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE;
DevMode^.dmDefaultSource := NumBandeja;
end;
FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
GlobalUnlock(DeviceMode);
end;



Si alguien lo mejora que lo postee... Saludos.

atrus
21-05-2008, 10:25:04
Una pregunta, e NumBandeja que pasas por parametros de donde sale?
gracias.

afxe
26-05-2008, 10:00:53
Teóricamente es un nº entre 1 y 15. Tendrías que ir activando cada uno y viendo que resultado se produce en la impresora. Parece ser que debería ser estandar en todas las impresoras, pero la realidad es que no es así.