Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Más o menos ese es el tema que quería comentar, es decir, las distintas posibilidades de mostrar la presentación preliminar:

Código Delphi [-]
   qrReport1.PreviewModal; // aqui usaremos distintas formas.
   ShowMessage('se ve o no se ve');
   qrReport1.Free;

- PreviewModal: es una ventana modal, no puedes cambiar a otra ventana hasta cerrarla, y el código que lo invoca se queda parado en esa línea. . El código se ejecuta tal y como está escrito, de forma que el programa no llega a la línea del ShowMessage hasta que se cierre la ventana del preview, una vez aceptado el ShowMessage, después se libera el quickreport.

- PreviewModeless: se muestra la ventana pero el código sigue "corriendo", es decir, se muestra el preview y el ShowMessage, es posible que el showmessage se muestre antes porque el el preview tarde en cargar todos los datos. Es más, si aceptamos el ShowMessage con rapidez, debido a que es Modeless, no se verá el informe porque se puede ejecutar la línea qrReport1.Free antes de que se haya mostrado en pantalla el QuickReport.

- Preview: Se comporta como un PreviewModal pero realmente no es una ventana modal al 100 %, es decir, mientras estas viendo el Preview, podrías mover el foco a otra ventana del programa y volver de nuevo a esta. El código se ejecuta como el PreviewModal. Por el hecho de poder pasar el foco a otra ventana, el usuario podría lanzar otra ventana de presentación preliminar y causar errores al crear una ventana que ya existe (hay que tenerlo en cuenta si se usa este método, por ejemplo inhabilitando el botón de mostrar el preview si ya se ha pulsado).

Desde la presentación preliminar, se puede usar el botón imprimir sin importar cual de los 3 métodos anteriores, se haya usado para llamar a dicha presentación.

Incluso sin mostrar la presentación preliminar, puede imprimirse el quickReport por código :
Código Delphi [-]
  // creamos el quickreport y abrimos las consultas
  qrReport1.print;

Yo suelo usar PreviewModal porque es más cómodo para mi, como programador, además si el usuario abre 3 o 4 presentaciones al mismo tiempo, él mismo se marea con tantas ventanas, así le obligo a "seguir un orden de trabajo" .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 25-01-2007 a las 11:57:40.
Responder Con Cita
  #2  
Antiguo 26-01-2007
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
Vlady Va por buen camino
Gracias aladelta y Lepe por su ayuda les cuento:

Antes de probar la idea de aladelta de utilizar la función para comprabar primero si ya existe un preview creado quiero seguir las sugerencias de Lepe pero tengo un inquietud con el previewmodal, pues este cuando lo utilizo con formularios creados mediante la opción de delphi File-New-Report me aparece inabilitados los botones de impresión y configuración de impresora, pero cuando utilizo reportes seleccionados y puesto sobre un formulario estas opciones si aparecen habilitados asi utilice el previewmodal que es lo que necesito el unico inconveniente es que tengo cerca de 60 reportes y la gran mayoria los tengo creados mediante la primera opción y el paso de todos estos a la segunda forma seria volver a construir todo, si lepe me puede sugerir como puedo crear esto formularios con previewmodal y me aparesca habilitado la opcion de imprimir. Para mayor compresión voy a mostrar las dos forma en que llamo a los preview;


Código Delphi [-]
procedure TPrincipal.ConsultarInventario1Click(Sender: TObject);
Var
   Ri : TRinventarios3;
begin
    Ri := TRinventarios3.Create(Nil);
    with Ri do
    Begin
      try
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Text := 'SELECT * FROM CONSULTAINVENTARIO ('  + Inttostr(DataM.Recepcionista['N_Turno']) +  ')';
      Query1.Active := True;
      previewModal;
      Query1.Close;
      finally
        FreeAndNil(Ri);
      end
    End
end;

Esta es la primera forma en que creo los formularios y me aparece desabilitados los botones de impresión.

Código Delphi [-]
procedure TItemFactura.LMDButton8Click(Sender: TObject);
begin
     //Consulta de Impresion
    Application.CreateForm(TVistaRecibo, VistaRecibo);
    with VistaRecibo do
    Begin
    try
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('SELECT O.Habitacion, O.N_Orden, C.Nombres, C.Cedula, C.Telefono, C.Apellidos, O.Fecha_Llegada, ');
      Query1.SQL.Add('I.Fecha, I.Cantidad, I.Valor, I.IVA, S.Nombre, S.Valor, S.Iva FROM Orden_Servicio O, Cliente C, ItemServicio I, Servicio S');
      Query1.SQL.Add('WHERE O.N_Orden = ''' + inttostr(ConOrden['N_Orden']) + ''' AND ''' + inttostr(ConOrden['N_Orden']) + '''= I.Orden AND I.Servicio = S.Codigo AND O.Cliente = C.IdCliente ORDER BY I.Fecha ASC');
      Query1.Active := True;
      QuickRep1.PreviewModal;
    finally
      Free;
    end
    end
end;

Cuando los formulacios los llamo de esta forma si me aparece habilitadas las opciones de impresión.

Muchas gracias por la atención prestada.
Responder Con Cita
  #3  
Antiguo 26-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Muy curioso Vlady, tienes toda la razón.

Haciendo pruebas, hay que crear el report con un Form de dueño, useasé:
Código Delphi [-]
Ri := TRinventarios3.Create(FormXX);

Da igual el form que sea, pero de hecho con nil y con application como parámetro, PrinterSettings se queda inhabilitado. (En mi caso me deja imprimir).

Realmente no habrá problemas de destrucción de componentes mientras usemos FreeAndNil.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 26-01-2007
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
Vlady Va por buen camino
Unhappy

Gracias Lepe por tu ayuda de otro lado mirando el codigo que me dio aladelta me genera un error de compilacion en la siguiente linea:

Código Delphi [-]
if TQuickrep(TQRPreview(Screen.Forms[i].controls[4]).qrprinter.parentreport).name=buscar then
especificamente en ParentReport no se que unidad es la que maneja esta función o como puedo hacer para que este error desaparesca.
Responder Con Cita
  #5  
Antiguo 26-01-2007
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Hola de nuevo:

Vamos a ver si se puede solucionar este problema....y a ver si soy capaz de de ello...

Como me imagino que tienes las fuentes del quickreport "sin tocar" (que por cierto es el 4.0) , en la unidad QRPrntr, que debes compilar en las "uses" de tu unidad o de tu formilario, ahi en la linea 568, tienes la propiedad qrprinter del componente TQRPreview, que es quien controla y quien contiene tu listado, y que se crea en el momento de lanzar la ventana preview automatica que lleva por defecto el quickreport y que creo, por tanto, que es por donde te viene el problema de duplicidad de componentes en tu programa, igual que me pasaba a mi...

Lo que pude observar con esto, es que al utilizar la ventana preview del quickreport, este componente "qrprinter", lo unico que guarda de tu "quickreport" cuando lo diseñaste es el nombre, pero como es una propiedad dentro del componente, la unica forma de conprobar si ya existe un listado en ejecucion es de esta forma que te he puesto...

Prueba esto y cuenta, ya que a mi me funciona muy bien, y comprueba que compilas con las units correctas del quickreport...

Un saludo...
Responder Con Cita
  #6  
Antiguo 29-01-2007
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 21
Vlady Va por buen camino
Te cuento aladelta que no he podido dar con el error tengo todos los uses de reporte en la unidad en la que estoy trabajando y el unico error que me arroja es Undeclare identifier 'parentreport', la verdad no se como acceder tambien al codigo fuente de quickreport.

Ya no se que pueda hacer he realizado todas las sugerencias del foro y aun me continua arrojando el mismo error hasta ya he pensado en cambiar el quickreport por otro.


Gracias
Responder Con Cita
  #7  
Antiguo 29-01-2007
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Hola de nuevo:

Vamos por partes...digo yo...

- ¿tienes el quickreport 4.0?
- ¿tienes el directorio ubicado dentro de "library path" del delphi?, que de paso deberia ser "C:\Archivos de programa\Borland\Delphi7\quickrpt"

Es que no entiendo como no puedes abrir las units del quickreport con solo pulsar boton derecho sobre el componente y la primera opcion es la de "find component", y las units que yo compilo son "QRCtrls, QuickRpt, QRPrntr", ya que si el quickreport que intentas realizar no esta ubicado en la unit que lo lanza, pues tendras que añadir al principio de la misma las tres que te indico...

Yo tengo delphi 7, y la verdad no se porque no te deja acceder a las fuentes, miralo bien a ver si el error no es este y te viene por otro lado. Mira si el propio delphi te las encuentra de la forma que te he comentado antes...

Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Mostrar DXF Churi Gráficos 1 08-01-2007 14:33:20
Error al querer mostrar mensaje con JS YaninaGenia .NET 0 27-07-2006 16:00:45
mostrar o no mostrar un control en un DBCTRLGRID segun la fila gesteban OOP 0 10-11-2005 17:21:11
Urgente...error al querer mostrar form2 redlyon13 Varios 1 01-12-2003 15:32:12
Error al mostrar formulario jmselesan OOP 2 13-08-2003 21:11:14


La franja horaria es GMT +2. Ahora son las 01:10:21.


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