Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Impresora Pre-Definida con FR

Estimados foristas.

Necesito imprimir un reporte de Fast Report en una impresora definida por el nombre de la misma.

Tengo el siguiente codigo pero no me imprime nada.

Código Delphi [-]

AIndex := frxPrinters.IndexOf(Printer.Printers[Printer.PrinterIndex]);  <--- Devuelve la imp x defecto
AIndex := frxPrinters.IndexOf('HP PSC 750');  <--- Nombre de la impresora definida

Rep_Estudio.PrintOptions.ShowDialog := False;
if AIndex <> 0 then
begin
   frxPrinters.PrinterIndex         := AIndex;
   Rep_Estudio.PrintOptions.Printer := frxPrinters[AIndex].Name;
   Rep_Estudio.PrepareReport();
   Rep_Estudio.Print;
end;


Si dejo la primer linea definida de la variable aIndex, y tengo la impresora HP PSC 750 definida como predeterminada, me imprime correctamente.

Ahora si uso la segunda linea definida de la variable por medio del nombre de la impresora, y predetermino otra impresora , no funciona, sin embargo la variable a aIndex posee el mismo valor en ambas lineas.

Alguna sugerencia ?

La idea general es poder definir en un archivo de texto o ini, diferentes impresoras y asignarlas en runtime segun lo que se desee imprimir.

Muchas Gracias

Saludos..

Leo.
Responder Con Cita
  #2  
Antiguo 10-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
La idea general es poder definir en un archivo de texto o ini, diferentes impresoras y asignarlas en runtime segun lo que se desee imprimir.
Hola Ibdi.

No capto bién la idea de lo que buscas hacer. Para que el usuario asigne una de las impresoras disponibles, basta con pasarlas a un ListBox, ComboBox, etc, para que se las elija desde allí.

Pero en ese caso no tendría mucho sentido guardarlas en un archivo INI. Generalmente en este tipo de archivos se guardan configuraciones realizadas por el usuario y que se quieren conservar un cierto tiempo para que no tenga que volver a realizar la taréa cada vez que se inicie el programa.

Por ejemplo, si toda la semana van a imprimir en formulario continuo, sería cómodo que guardara como predeterminada la impresora matricial hasta que se realize una nueva elección por que la nueva taréa requiere de una impresora Laser. Es decir que mantenga la selección hasta que el usuario la vuelva a cambiar.

Si no entendí mal y la idea es esa, podrias hacer:
Código Delphi [-]
...
implementation

uses Printers, IniFiles;

var
  Prn: TPrinter;

(* Cargar impresoras en combo, seleccionar última usada *)
procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
begin
  with TIniFile.Create('YourApp.ini') do
  try
    Prn:= TPrinter.Create;
    ComboBox1.Items:= Prn.Printers;
    ComboBox1.ItemIndex:= 0;
    s:= ReadString('Impresora', 'Actual', ComboBox1.Text);
    ComboBox1.ItemIndex:= ComboBox1.Items.IndexOf(s);
    Prn.PrinterIndex:= Prn.Printers.IndexOf(s)
  finally
    Free
  end
end;

(* Seleccionó otra impresora *)
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Prn.PrinterIndex:= Prn.Printers.IndexOf(ComboBox1.Text)
end;

//...

(* Guardar ultima impresora seleccionada *)
procedure TForm1.FormDestroy(Sender: TObject);
begin
  with TIniFile.Create('YourApp.ini') do
  try
    WriteString('Impresora', 'Actual', Prn.Printers[Prn.PrinterIndex])
  finally
    Free
  end;
  if Assigned(Prn) then  // asegurarnos...
    Prn.Free;
end;
end.
Con el mismo resultado podés utilizar el registro de windows para almacenar la selección.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-05-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por lbidi Ver Mensaje
Estimados foristas.

Necesito imprimir un reporte de Fast Report en una impresora definida por el nombre de la misma.

Tengo el siguiente codigo pero no me imprime nada.

Código Delphi [-]

AIndex := frxPrinters.IndexOf(Printer.Printers[Printer.PrinterIndex]);  <--- Devuelve la imp x defecto
AIndex := frxPrinters.IndexOf('HP PSC 750');  <--- Nombre de la impresora definida

Rep_Estudio.PrintOptions.ShowDialog := False;
if AIndex <> 0 then
begin
   frxPrinters.PrinterIndex         := AIndex;
   Rep_Estudio.PrintOptions.Printer := frxPrinters[AIndex].Name;
   Rep_Estudio.PrepareReport();
   Rep_Estudio.Print;
end;


Si dejo la primer linea definida de la variable aIndex, y tengo la impresora HP PSC 750 definida como predeterminada, me imprime correctamente.

Ahora si uso la segunda linea definida de la variable por medio del nombre de la impresora, y predetermino otra impresora , no funciona, sin embargo la variable a aIndex posee el mismo valor en ambas lineas.

Alguna sugerencia ?

La idea general es poder definir en un archivo de texto o ini, diferentes impresoras y asignarlas en runtime segun lo que se desee imprimir.

Muchas Gracias

Saludos..

Leo.
No entiendo el Fast Report, pero las riendas de cómo cambiar la impresora por defecto por otra, es el uses Printers.pas
Código Delphi [-]
AIndex := Printer.Printers.IndexOf('HP PSC 750');  <--- Buscar la impresora por la que voy a imprimir

if (AIndex = -1) then
begin
  ShowMessage('No se encuentra la impresora, o la impresora a cambiado de nombre');
  Exit;
end;

Rep_Estudio.PrintOptions.ShowDialog := False;
if AIndex <> 0 then
begin
   Printer.PrinterIndex         := AIndex;
   Rep_Estudio.PrintOptions.Printer := Printer.Printers[AIndex];
   Rep_Estudio.PrepareReport();
   Rep_Estudio.Print;
end;

Espero que te funcione.

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 10-05-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Gracias , ecfisa..

Quizás no me explique bien.. La idea es que mi sistema pueda imprimir indistintamente en varias impresoras, sin que el usuario las elija. Algunos reportes deben salir por una matricial y otros por una laser, pero queremos que no las seleccione el usuario , que sea automático según lo que van a imprimir.

Por eso la idea de un archivo ini , o similar donde pueda guardar los nombres de las impresoras definidas y asignarlas al momento de la impresión.

Y que sea independiente de la impresora predeterminada que tenga.. me explico??

Saludos
Responder Con Cita
  #5  
Antiguo 10-05-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Gracias olbeup..

Intentare hacerlo de este modo y te cuento.

Saludos.
Responder Con Cita
  #6  
Antiguo 10-05-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Desgraciadamente, no pude con ninguna de las opciones.
La de ecficsa no me sirve ( gracias igual ), porque el usuario de debe poder seleccionar la impresora.
Y la del amigo olbeup, no me imprime por la impresora que deseo.

Sigo investigando.
Responder Con Cita
  #7  
Antiguo 10-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ibdi.
Cita:
Quizás no me explique bien..
O tal vez fuí yo quién no te supe entender, pero ahora está clarísimo. Siendo así, creo lo que te sugiere olbeup te va a funcionar.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 11-05-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Yo utilizo el QuickReport y cuando quiero imprimir en otra impresora sólo tengo que cambiar el valor de Printer.PrinterIndex := x o buscar la impresora por la cual quiero imprimir Printer.Printers.IndexOf('Nombre de la Impresora'), sino te imprime cuando cambias éste valor, algo te falta por cambiar, el Fast Report no es tan distinto de QuickReport a la hora de coger los parámetros de Printer y todo depende del valor que tenga el Printer.PrinterIndex, es tan sencillo cómo cambiar éste valor.

Cambia:
Código Delphi [-]
AIndex := Printer.Printers.IndexOf('HP PSC 750');  <--- Buscar la impresora por la que voy a imprimir

if (AIndex = -1) then
begin
  ShowMessage('No se encuentra la impresora, o la impresora a cambiado de nombre');
  Exit;
end;

Rep_Estudio.PrintOptions.ShowDialog := False;
if AIndex <> 0 then
begin
   Printer.PrinterIndex         := AIndex;
   Rep_Estudio.PrintOptions.Printer := Printer.Printers[AIndex];
   Rep_Estudio.PrepareReport();
   Rep_Estudio.Print;
end;
Por esto:
Código Delphi [-]
AIndex := Printer.Printers.IndexOf('HP PSC 750');  <--- Buscar la impresora por la que voy a imprimir

if (AIndex = -1) then
begin
  ShowMessage('No se encuentra la impresora, o la impresora a cambiado de nombre');
  Exit;
end;

Rep_Estudio.PrintOptions.ShowDialog := False;
Printer.PrinterIndex := AIndex;
Rep_Estudio.PrepareReport();
Rep_Estudio.Print;

Tienes un error en, if AIndex <> 0 then ya que el valor puede ser 0 y le estas diciendo que si es distinto que 0 que imprima, el AIndex puede ser 0, tienes que poner que si es distinto que -1 para que funcione, pero eso ya te lo he puesto arriba.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 11-05-2012 a las 08:50:17.
Responder Con Cita
  #9  
Antiguo 11-05-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
Muchas gracias olbeup...

Problema solucionado y funcionando perfectamente.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como averiguar el charset que tiene definida una Base de Datos Firebird apicito Firebird e Interbase 8 15-07-2010 14:01:26
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
¿Packet Sniffer? Cómo saber quien tiene definida un IP Virtual... Neftali [Germán.Estévez] Redes 22 14-05-2007 19:30:21
Abrir carpeta de una ruta definida Aprendiendo Varios 3 01-03-2007 17:41:50


La franja horaria es GMT +2. Ahora son las 16:35:25.


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
Copyright 1996-2007 Club Delphi