PDA

Ver la Versión Completa : Cambiar impresora tiempo Ejecucion


lacovera
18-06-2010, 12:58:48
Hola a todos! tengo una duda 'existencial'!!!

Tengo que cambiar la impresora en la que se mana un archivo en un momento dado, no la quiero predeterminada, puedo ponersela en algún parámetro x ejemplo en el shellExecute?
ahora lo estoy imprimiendo asi, claro, sale xla predeterminada.

ShellExecute(Printer.Handle, 'print', PChar(('hola.PDF')), nil, nil, 0);

un saludo y gracias!!

marcoszorrilla
18-06-2010, 15:23:08
Function GetImpresora(Impre:String):Integer;
Var
nCont:Integer;
lSearch:Boolean;
cNewLIne:String;
begin
lSearch:=False;
cNewLine:=Chr(10)+Chr(13);

For nCont:=0 to Printer.Printers.Count - 1 do
//buscamos la impresora en la lista del sistema
begin

if Pos(impre, Printer.Printers[nCont]) <> 0 then
begin
lSearch:=True;
Result:=nCont;
Break;
end;

end;

if lSearch = False then
begin
ShowMessage('Impresora no encontrada.'+impre+cNewLine+'Se utilizará la predeterminda.');
Result:=-1
end;

end;


Yo para uso con Quickreport me he he creado esta función y me va perfectamente, puedes hacer la prueba.

Un Saludo.

lacovera
18-06-2010, 16:49:31
ok pruebo y cuento!
gracias

lacovera
18-06-2010, 18:31:08
es un poco raro..no me hace absolutamente nada
le pongo
GetImpresora('PDFCreator');

y me imprime por la predeterminada igual

sin embargo le paso
GetImpresora('NoExiste');
y me detecta que no existe...

delphi.com.ar
19-06-2010, 00:23:44
Sucede que la función que te pasó Marcos, sirve para obtener el índice de la lista de impresoras de la VCL dentro del propio entorno de tu proceso, y tu estas utilizando ShellExecute para imprimirlo, que donde el Shell crea un proceso nuevo según lo que tenga asociado al método "print" de los archivos con extensión PDF.
Una solución posible es utilizar el código de Marcos para cambiar el DefaultPrinter del sistema, algo que no me gustaría que haga algún programa de terceros que instale en mi PC. Si solo te interesa imprimir PDFs, te recomiendo buscar e investigar, que seguramente existan, formas mas completas para imprimir documentos de este tipo, tales como algun juego de APIs que ofresca Adobe.

Saludos!

rruffino
03-11-2010, 15:58:22
:DHola gente, tengo el mismo problema. No puedo cambiar la impresora en tiempo de ejecucion. Uso Delphi 7 y Quickreport 4.05. Lo que yo hago es en un combo obtener todas las impresoras instaladas y ahi me muestra perfectamente las impresoras instaladas y con
printer.printerindex
obtengo la impresora por defecto. Ahora cuando elijo otra del combo cambio la propiedad antes mencionada asignandole el valor de la impresora que acabo de seleccionar pero cuando mando a imprimir el qiuckreport siempre me imprime en la impresora configurada por defecto.
Desde ya les agradezco su respuesta.
Saludos...

olbeup
04-11-2010, 09:33:07
Es muy simple, pon en el "uses" el "Printers", en un ComboBox carga todas la impresora que tienes, después sólo tienes que hacer "Printer.PrinterIndex = ComboBox.ItemIndex y listo.

Para cargar todas las impresora en un ComboBox lo que tienes que hacer es
ComboBox1.Items.Clear;
ComboBox1.Items.Assign(Printer.Printers);
Seleccionar la impresora por la cual quieres imprimir y cambiar el Printer.PrinterIndex = ComboBox1.ItemIndex.

Un saludo.

marcoszorrilla
04-11-2010, 11:33:03
Ejemplo de uso de la función que cité en su día.

procedure TfrDescuadresTodosProv.spListadoVistaClick(Sender: TObject);
begin
DmConex.Impres.Active:=True;
Application.CreateForm(TfrLstDescuadres, frLstDescuadres);
frLstDescuadres.ListaDescuadres.PrinterSettings.PrinterIndex:=GetImpresora(DmConex.ImpresListados.va lue);
frLstDescuadres.ListaDescuadres.PreviewModal;
frLstDescuadres.Close;
DmConex.Impres.Active:=False;
end;

ListaDescuadres es un objeto TQuickRep. y frLstDescuadres es el formulario contenedor.

Un Saludo.

rruffino
04-11-2010, 13:24:10
He aplicado la funcion que dice Marcos y me anduvo perfecto. Muchas gracias!!!!