Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Cambiar impresora tiempo Ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=68519)

lacovera 18-06-2010 12:58:48

Cambiar impresora tiempo Ejecucion
 
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

Código Delphi [-]
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

El mismo problema...
 
: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
Código Delphi [-]
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
Código Delphi [-]
  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.

Código Delphi [-]
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

Gracias
 
He aplicado la funcion que dice Marcos y me anduvo perfecto. Muchas gracias!!!!


La franja horaria es GMT +2. Ahora son las 14:50:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi