PDA

Ver la Versión Completa : Seleccion de Impresora por Defecto


lbidi
21-03-2012, 20:08:31
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 (http://delphi.about.com/cs/adptips2001/a/bltip1001_5.htm)

Saludos.

roman
21-03-2012, 20:57:22
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:


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.

...
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.
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
...
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
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 (http://www.fast-report.com/en/forum/lofiversion/index.php/t8809.html), revisá si te resulta útil.

Saludos.

lbidi
28-03-2012, 15:37:40
Gracias efcisa.. Con ese enlace y tu sugerencia, logre hacerlo.

Saludos.