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 25-09-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 18
nfrfabian Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-09-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Poder: 18
nfrfabian Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 26-09-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
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.
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
seleccion de impresora y letra de la impresora emeceuy Impresión 6 13-08-2017 14:11:05
Ahora la seleccion de impresora no funciona Taribus Impresión 4 09-07-2007 22:58:12
selección en Rave Report david.rguez Impresión 0 19-09-2006 16:37:45
Selección de impresora en QuickReport Athalon Impresión 4 10-08-2004 16:16:36
Imprimir con word en impresora en concreto Firibiri Servers 0 07-10-2003 11:09:09


La franja horaria es GMT +2. Ahora son las 14:48:54.


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