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 impresora en rave y word (https://www.clubdelphi.com/foros/showthread.php?t=48450)

nfrfabian 25-09-2007 18:29:16

Seleccion impresora en rave y word
 
Hola, tengo un problema que no pude solucionar y quisiera sus consejos. Mi problema es el siguiente: Utilizo Rave Report para imprimir unas consultas a una base de datos. la impresion la tengo que realizar en 2 impresoras distintas. Tambien utilizo word para imprimir un documento al que le paso unos datos variables (mediante campos), en este caso tambien tengo que imprimir en dos impresoras distintas.
Buscando en el foro encontre la forma de seleccionar la impresora de una lista, tambien pude grabar las selecciones en un archivo para que al inicio de la aplicacion se carguen las impresoras en la que se deben imprimir en cada caso, pero a la hora de imprimir siempre imprime en la impresora por defecto.
Las intrucciones que utilizo son las siguientes:

Para cargar en un combo las impresoras disponibles:
Código Delphi [-]
  for i := 0 to Printer.Printers.Count-1 do begin
     Printer.PrinterIndex := i;
     Printer.GetPrinter(Device, Driver, Port, hDMode);
     combocertificado.Items.Add(Device);
     comboresto.Items.Add(Device);
     comborespaldo.Items.Add(Device);
  end;

Despues de seleccionar la impresora, guardo en un archivo todas las selecciones necesarias.
Al iniciar la aplicacion cargo en una variable global la impresora por defecto:
Código Delphi [-]
gindiceprinterdefault := printers.printer.printerindex;



Despues verifico que las impresoras que se grabaron en el archivo esten disponibles:

Código Delphi [-]
// vnombreimpresora es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
  gindiceprintercertificado := index;
end
else
begin
  gindiceprintercertificado := gindiceprinterdefault;
  
end;
 
// vnombreimpresora2 es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
  gindiceprinterrespaldo:= index;
end
else
begin
  gindiceprinterrespaldo := gindiceprinterdefault;
  
end;


Despues se suponia que cuando tenga que imprimir selecciono la impresora que corresponda:

Código Delphi [-]
Printer.PrinterIndex := gindiceprintercertificado;
//o
Printer.PrinterIndex := gindiceprinterrespaldo;

Me parece que el error al final porque al ser el Rave Report o Microsoft WORD programas externos, ellos no reciben el indice de la impresora que necesito.
En una parte vi que existe una forma de pasarle la impresora seleccionada a otro generador de reportes:

Código Delphi [-]
QuickRep1.PrinterSettins.PrinterIndex := nImpCocina;

Pero ninguno de los componentes de rave report tienen una propiedad para asignarle el indice de la impresora (o yo no lo encuentro). Los componentes que utilizo son:
RvSystem1
RvProject2
RvDataSetConnectioncronorespal
En este caso el componente RvSystem1, tiene para elegir el numero de copias, la pagina inicial, y otras propiedades, pero ninguna para indicarle el inice de la impresora a utilizar.


Para imprimir con MS Word utilizo lo siguiente:
Código Delphi [-]
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  gWord: OLEVariant;
  document, Documento: Variant;
  
begin
...
  path := ExtractFilePath(Application.ExeName);
  path := path + 'CARPETA\archivo.doc';
  Printer.PrinterIndex := gindiceprintercertificado;    
      gWord := CreateOLEObject('Word.Application');
      gWord.Documents.Add(path);
      Documento := gWord.Documents.Item(1);
      Documento.Variables.Add('nombre', nombre);
      Documento.Variables.Add('diaspa', nombreservicio);
      Documento.Variables.Add('p', cantcli);
      Documento.Variables.Add('n', certificado);
      Documento.Variables.Add('v', vencimiento);
      Documento.Variables.Add('f', factura);
      Documento.Fields.Update;
      documento.Fields.ToggleShowCodes;
      Document := gWord.ActiveDocument;

      Document.PrintOut(false);
      gWord.ActiveDocument.Close(wdDoNotSaveChanges);  
      ...


Sinceramente nose donde esta el error (solo la sospecha de que tengo que pasarle el indice de la impresora seleccionada tanto a rave report como a word). Las variables que utilizo tiene datos correctos (las tres variables son distintas: gindiceprinterdefault, gindiceprintercertificado, gindiceprinterrespaldo).
Si me puede ayudar se los voy agradecer, hace dos dias que estoy con esto y no puedo resolverlo. Gracias.

nfrfabian 26-09-2007 13:30:09

Hola de nuevo. Les comento que encontre la solucion a mis problemas, seguro no son las mejores pero funcionan. Por si alguien tiene un problema similar les dejo la forma en que lo hice.
En rave en el evento RvSystemBeforePrint puse la instruccion que cambia el indice de la impresora que necesito:
Código Delphi [-]
procedure Tfrespaldo.RvSystem1BeforePrint(Sender: TObject);
begin
RvSystem1.BaseReport.PrinterIndex := gindiceprinterrespaldo;
end;
De esta forma funciona bien pero deja como predeterminada en rave a la impresora elegida, no puede dejarla con la impresora anterior, esto me obliga a tener que elegir la impresora siempre ya sea la que yo quiero o la predeterminada. Si alguien sabe como dejarla con la impresora original seria mucho mejor. Por lo pronto quedara de esta forma.

En cuanto a word, la solucion la saque de la pagina de microsoft, la solucion es la ideal porque la impresora seleccionada sirve para el documento:

Código Delphi [-]
word.WordBasic.fileprintsetup(printer := 'nombre imprsora',DoNotSetAsSysDefault := 1);
Si alguien tiene una solucion para rave se lo voy a agradecer.

FGarcia 26-09-2007 17:10:21

Hola! y no te serviria igual el evento AfterPrint? Es decir Antes de Imprimir (BeforePrint) Cambias el indice de la impresora y Despues de Imprimir (AfterPrint) lo vuelves al original.


La franja horaria es GMT +2. Ahora son las 12:47:55.

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