Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Deshabilitar botones del preview hasta que el preview del report no haya termindo (https://www.clubdelphi.com/foros/showthread.php?t=27489)

Jesús Pena 22-11-2005 13:29:36

Deshabilitar botones del preview hasta que el preview del report no haya termindo
 
Tengo el siguiente problema: He definido un informe (con QuickReport) base el cual tiene asociado un formulario de Preview, dicho formulario tiene una ToolBar en la que tengo dispuestos una serie de botones, lo que quiero hacer (si es posible y alguno puede ayudarme) es mientras el informe no esté totalmente realizado no se pueda acceder a los botones de la toolbar (excepto al de salida, pero eso ya es lo de menos). Dicho con otras palabras ¿como deshabilitar los controles de la toolbar del formulario de previsualización mientras que el informe no se haya previsualizado por completo?

Gracias de antemano

Lepe 22-11-2005 16:16:15

En el toolbar tendrás un boton que al pulsarlo, activas el preview; pues en ese mismo evento, añade un try ... finally e inhabilitas el toolbar.

Código Delphi [-]

procedure Tform1.TToolbutton1Click(...)
begin

try 
  Toolbar1.Enabled := false;

... // crear el preview y visualizarlo;

finally
  toolbar1.Enabled:= true;
end;
end;

[/saludos]

Jesús Pena 23-11-2005 00:18:43

No me sirve esta opción
 
El preview se ejecuta automáticamente (Como lo hace quickreport). El preview es igual que el que tiene el quickrepor mas una serie de botones para realizar exportaciones a distintos formatos y esos botones son los que quiero inutilizar mientras se esté construyendo el informe pues solo serán operativos una vez que se ha completado la previsualización del informe.

Lepe 23-11-2005 17:18:57

Aps, lo entendí de otra forma.

Para tu Preview Personalizado, tendrás que hacer uso de TQRPreview, y dicho Objeto tiene un evento de Page Available

Preview : TQRPreview;

Código Delphi [-]
uses QRPrntr, QuickRpt, QRCTRLS;

procedure TPrevi.PreviewPageAvailable(Sender: TObject; PageNum: Integer);
begin

  case Preview.QRPrinter.Status of
    mpReady: StatusBar1.Panels[0].Text := 'Listo';
    mpBusy: StatusBar1.Panels[0].Text  := 'En Proceso';
    mpFinished:StatusBar1.Panels[0].Text := 'Finalizado';
  end;
No creo que necesites otros "uses" y puede que incluso te sobren.

saludos

Jesús Pena 24-11-2005 00:55:17

Gracias por tu solución me ha servido de mucha ayuda. Ahora solo se me plantea una pequeña duda, tengo asociado al botón de cierre del preview el siguiente código
Código Delphi [-]
  If QRPreview1.QRPrinter.Status = mpBusy then
    QRPreview1.QRPrinter.Cancel;
  Close;
y lo que ocurre es que si hago click en el mientras se prepara el listado da un access violation at ...... ¿donde está el fallo?

Gracias de antemano

Lepe 24-11-2005 17:08:03

Ahora no tengo delphi a mano para comprobarlo, intenta esto:

Código Delphi [-]
  if Assigned(QRPreview1.QRPrinter) then
  If QRPreview1.QRPrinter.Status = mpBusy then
  begin
    QRPreview1.QRPrinter.Cancel;
    Application.processMessages;
  end
  else
    Freeandnil(QRPreview1); // esto hará desaparecer el QRPreview
  Close
  end;

Si eso no funciona, entonces tendrás que obligar a que no se cierre el listado mientras esté ocupado el QRPrinter, podrías usar el evento OnCloseQuery y denegar la petición de cerrado.

saludos

Jesús Pena 24-11-2005 22:30:21

He probado lo que me enviaste y ...
 
Lo dicho he probado lo que me has enviado y puede valer (me explico, me dá un error de tipo EwriteError pero investigaré para solucionarlo).

Gracias por tú atención.

Una cosa mas, sobre el preview, tengo definido el registro de la clase en el menú principal de la aplicación y me pregunto si no sería mejor definirla en el formulario base (del cual heredan todos los formularios que tienen acceso a datos, el resto son formularios normales).

Repito, MIL GRACIAS.

Lepe 25-11-2005 17:11:01

Cita:

Empezado por Jesús Pena
Una cosa mas, sobre el preview, tengo definido el registro de la clase en el menú principal de la aplicación

me he perdido, igual estoy un poco espeso. ¿A qué te refieres exactamente con lo puesto en negrita?

saludos

Jesús Pena 27-11-2005 21:39:18

El mas espeso de todos ...
 
el mas espeso de todos soy yo, ya tengo el tema totalmente resuelto, me habia hecho la p...a un lio con las declaraciones, procedimientos duplicados, etc. Las explicaciones anteriores me han servido de gran ayuda y una gran fuente de inspiración. El fin de semana ha sido muy productivo.

Gracias a todos por la ayuda y colaboración con mi causa.:D


La franja horaria es GMT +2. Ahora son las 21:31:13.

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