Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Seleccion de Impresora por Defecto (https://www.clubdelphi.com/foros/showthread.php?t=78125)

lbidi 21-03-2012 20:08:31

Seleccion de Impresora por Defecto
 
Estimados..

Resulta que tengo un sistema que imprime en 2 impresoras. En una de las opciones imprimo siempre
por la impresora por defecto y en otras opciones solicito al usuario que seleccione la impresora.

Resulta que si el usuario selecciona x ej. la impresora 2 para hacer un informe, Windows "recuerda"
la ultima impresora seleccionada y cuando necesita imprimir por la opcion uno que es la "defecto"
no toma esta, sino que toma la ultima que Windows "imprimio" o guardo.

Como puedo hacer para que siempre tome la impresora por defecto sin tener que seleccionarla
independiente que en otras opciones del sistema se pueda imprimir por otras impresoras.

Gracias.

ecfisa 21-03-2012 20:25:30

Hola Ibidi.

Revisá este enlace: Setting the Default Printer from code

Saludos.

roman 21-03-2012 20:57:22

Cita:

Empezado por lbidi (Mensaje 428197)
Como puedo hacer para que siempre tome la impresora por defecto sin tener que seleccionarla
independiente que en otras opciones del sistema se pueda imprimir por otras impresoras.

Para seleccionar la impresora por defecto en tu aplicación basta que pongas:

Código Delphi [-]
Printer.PrinterIndex := -1;

Si lo que quieres es cambiar cuál es la impresora por defecto en el sistema, entonces usa la opción de ecfisa.

// Saludos

olbeup 22-03-2012 08:51:31

También lo que puedes hacer es antes de imprimir guardar la impresora por defecto.

Código Delphi [-]
...
var
  IDDefault: Integer;
begin
  IDDefault := Printer.PrinterIndex;

  QuickReport.PrinterSetup;
  ...
  ...

  Printer.PrinterIndex := IDDefault;
end;

Un saludo.

lbidi 23-03-2012 21:14:41

Gracias a todos por responder.

Mi deseo no es "setear" la impresora por defecto, sino imprimir siempre en dicha impresora
independientemente que se haya impreso en otra, porque en una misma aplicacion,
si imprimo por otra impresora seleccionandola previamente, al parecer windows "recuerda"
cual fue la ultima utilizada e imprime por esta, al menos asi me esta saliendo ahora.

He probado con la opcion de PrinterIndex = -1, pero no ha causado ningun efecto.

Si hago la sugerencia de olbeup, printer.printerindex, que devuelve ?? la por defecto
o la ultima utilizada??

Les cuento un poco mas.

Tengo en una pc 2 impresoras, una matricial y una laser.
Los informes grandes se sacan por la laser la cual selecciona el usuario, pero hay un
ticket que tiene que salir SIEMPRE por la matricial sin preguntar al usuario, y esta
es la impresora por defecto del sistema.
Por eso , si imprimo algun informe por la laser, luego cuando imprimo el ticket, de alguna
manera recuerda que ésta fue la ultima y me imprime el ticket por esta impresora,
en lugar de la matricial.

Gracias por las sugerencias.

marcoszorrilla 23-03-2012 21:29:42

Yo guardo en un fichero INI las impresoras que se van a utilizar en la aplicación, configurable por el usuario, a continuación los fragmentos de código que utilizo.
Código Delphi [-]
  Case nModelo of
  1:begin
    Application.CreateForm(TfrLptFactura, frLptFactura);
    frLptFactura.LptFactura.PrinterSettings.PrinterIndex:=GetImpresora(Impresora1);
      if n = 1 then
      frLptFactura.LptFactura.PreviewModal
      else
      frLptFactura.LptFactura.Print;

    frLptFactura.Close;
    end;



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;



Procedure Obtener_Impresoras();
begin
MiCarpeta:=ExtractFilePath(Application.ExeName);
IniPrinters:=MiCarpeta+'MZprn.ini';
  Try
  //Abrir el INI
  Fichero := TIniFile.Create(IniPrinters);
  Impresora1:=Fichero.ReadString ('Facturas', 'String','Error');
  Impresora2:=Fichero.ReadString ('Albaranes', 'String','Error');
  Impresora3:=Fichero.ReadString ('Ruta', 'String','Error');
  Impresora4:=Fichero.ReadString ('Listados', 'String','Error');
  Except
  ShowMessage('No se pudo acceder al fichero '+Fichero.FileName  );
  end;
//
end;

//Ejemplo de INI

[Facturas]
String=\\FACTURACION\EPSON LQ-590 ESC/P 2 Ver 2.0
[Albaranes]
String=\\FACTURACION\EPSON LQ-590 ESC/P 2 Ver 2.0
[Ruta]
String=KONICA MINOLTA C360SeriesPCL
[Listados]
String=KONICA MINOLTA C360SeriesPCL


//Creación del INI


procedure TfrImpresoras.SpeedButton5Click(Sender: TObject);
var
lCrear:Boolean;
begin
lCrear:=True;
   if FileExists(IniPrinters) then
   begin
      if Application.MessageBox('El fichero ya existe.¿Seguro que desea sobreescribirlo?','Atención',mb_OkCancel +
      mb_IconQuestion)= idOk then
      begin
      DeleteFile(IniPrinters);
      lCrear:=True;
      end
      else
      begin
      ShowMessage('Opción cancelada por el usurio. El fichero no se creo.');
      lCrear:=False;
      end;
  end
  else
  lCrear:=True;
  if lCrear = True then
  begin
    Try
    Fichero := TIniFile.Create (IniPrinters); // Accedemos al Fichero
    //Facturas
    Etiqueta:='Facturas';
    Fichero.WriteString(Etiqueta,'String',EdFacturas.Text);
    //Albaranes
    Etiqueta:='Albaranes';
    Fichero.WriteString(Etiqueta,'String',EdAlbaranes.Text);
    //Albaranes Ruta
    Etiqueta:='Ruta';
    Fichero.WriteString(Etiqueta,'String',EdRuta.Text);
    //Listados
    Etiqueta:='Listados';
    Fichero.WriteString(Etiqueta,'String',EdListados.Text);

    Fichero.Free; // Cerramos el Fichero
    Obtener_Impresoras();
    Except
    ShowMessage('Atención:Se produjo un error, el fichero INI no se grabó.');
    end;
  end;

end;
Un Saludo.

newtron 24-03-2012 12:12:36

¿Y sería una tontería capturar la impresora activa antes de imprimir en la matricial, seleccionar la impresora matricial, imprimir en ella y luego volver a dejar la impresora que había?

olbeup 26-03-2012 08:47:57

Hola lbidi,

Efectivamente tienes razón, Prueba con esto otro, está funciona correctamente
Código Delphi [-]
...
var
  IDDefault: Integer;
begin
  // Guardar la impresora por defecto
  IDDefault := Printer.PrinterIndex;

  // Decir cual es la impresora que tiene que utilizar el QuickReport
  QuickRep1.PrinterSettings.PrinterIndex := IDDefault;
  QuickRep1.PreviewModal;

  // Restaurar la impresora por defecto
  Printer.PrinterIndex := IDDefault;
end;
Un saludo

lbidi 26-03-2012 15:27:12

Gracias a todos por vuestras respuestas.

Aunque veo que la mayoria del codigo posteado es para QuickReport.

Estoy usando Fast Report, pero tratare de adaptarlo.

Saludos.

olbeup 27-03-2012 08:18:39

Cita:

Empezado por lbidi (Mensaje 428461)
Gracias a todos por vuestras respuestas.

Aunque veo que la mayoria del codigo posteado es para QuickReport.

Estoy usando Fast Report, pero tratare de adaptarlo.

Saludos.

Efectivamente todo está orientado a QuickReport, no he visto ningún post tuyo referente a Fast Report, casi todos usamos al menos yo QuickReport y todas las respuesta iban orientadas a QuickReport.

Un saludo.

lbidi 27-03-2012 14:34:54

olbeup...Efectivamente tienes razon.. No mencione el uso de FR en ningun lado.

Casi siempre lo hago, pero esta vez en el apuro, omiti hacerlo.

Pido disculpas por la falta de informacion brindada al hacer la consulta.

Espero hacerlo mejor la proxima.

Gracias a todos.

Saludos.

Leonardo

Casimiro Notevi 27-03-2012 15:33:51

Ya sabemos: Mejores preguntas obtienen mejores respuestas ;)

ecfisa 27-03-2012 21:04:11

Hola Ibdi.

Como la mayoría también uso Quick Report, pero buscando leí que en la propiedad PrintOptions.Printer de Fast Report, se encuentra la última impresora seleccionada.
A partir de ese dato, encontré este ENLACE, revisá si te resulta útil.

Saludos.

lbidi 28-03-2012 15:37:40

Gracias efcisa.. Con ese enlace y tu sugerencia, logre hacerlo.

Saludos.


La franja horaria es GMT +2. Ahora son las 10:28:38.

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