Club Delphi  
    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 23-02-2008
marlulipe marlulipe is offline
No confirmado
 
Registrado: jun 2007
Posts: 16
Poder: 0
marlulipe Va por buen camino
Question Barra de progreso?

Hola... algunos de los reports que genero tardan un poco bastante de tiempo.... y para evitar que el usuario vuelva a hacer click en el botón y cuelgue todo me gustaría mostrar algo asi como una barra de progreso o una barra de estado que indique que se está generando el reporte.

Alguna sugerencia? Es util la barra de progreso para esto? Cómo hago a calcular el tiempo? Debería colocarla en un form aparte del que uso para que el usuario seleccione los datos y que llama al preview del report?


Muchas gracias por su ayuda!!
Responder Con Cita
  #2  
Antiguo 23-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si de entrada no sabes cómo calcular el progreso de la tarea, yo optaría por utilizar una imagen GIF o un pequeño archivo AVI que mostrase que se está llevando a cabo el reporte. Dicha imagen o vídeo AVI lo mostraría a su vez en un formulario "modal", de forma que, mientras este estuviera visible, el usuario no pudiera salir del mismo, por decirlo así.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 24-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aparte de lo dicho por el Maestro dec, que ademas no se me hubiera ocurrido (esta genial).

Este codigo lo encontre por ahi, crea un progressBar en un dialog.

Código Delphi [-]
procedure TForm1.DialogTimer(Sender: TObject);
var    
  aPB : TProgressBar; 
begin    
  if NOT (Sender is TTimer) then 
    Exit;
  if ((Sender as TTimer).Owner) is TForm then    
    with ((Sender as TTimer).Owner) as TForm do    
    begin      
      aPB := TProgressBar(FindComponent('Progress'));
      if aPB.Position >= aPB.Max then        
        ModalResult := mrCancel      
      else        
        aPB.StepIt;    
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var    
  AMsgDialog : TForm;    
  AProgressBar : TProgressBar;    
  ATimer : TTimer; 
begin    
  AMsgDialog := CreateMessageDialog('El Reporte esta por ejecutarse, Espere', 
   mtWarning, []) ;
  AProgressBar := TProgressBar.Create(AMsgDialog) ;
  ATimer := TTimer.Create(AMsgDialog) ;
  with AMsgDialog do    
  try     
    Tag := 15; // aqui determinas los segundos
    Caption := 'Reportes';
    Height := 100;

    with AProgressBar do begin      
      Name := 'Progress';
      Parent := AMsgDialog;
      Max := AMsgDialog.Tag;
      Step := 1;
      Top := 50;
      Left := 8;
      Width := AMsgDialog.ClientWidth - 16;
    end;

    with ATimer do begin      
      Interval := 1000;      
      OnTimer:=DialogTimer;     
    end;

    case ShowModal of 
      ID_CANCEL: //
    end;
  finally     
    ATimer.OnTimer := nil;
    Free;
  end;
end;


Ahora solo seria aplicarlo en tu codigo, supongo.

Saludos

Edito: no puedo arreglar el codigo con las etiquetas.

Última edición por dec fecha: 24-02-2008 a las 09:49:25.
Responder Con Cita
  #4  
Antiguo 24-02-2008
marlulipe marlulipe is offline
No confirmado
 
Registrado: jun 2007
Posts: 16
Poder: 0
marlulipe Va por buen camino
Question

Muchas gracias por la información! Un par de duditas... No tengo un objeto DialogTimer, estoy usando Delphi 5, viejito... quizas sea por eso

Por otro lado... mi codigo es así más o menos:

Código Delphi [-]
procedure TFormListadoAlumnoDatos.FormCreate(Sender: TObject);
  var FormProgressBar:TForm;
       ProgressBar:TProgressBar;
       timer:TTimer;
  begin
      // Aca uso un TIBQuery para obtener unos datos de la BD

   // Código que me pasaron  
   FormProgressBar:=CreateMessageDialog('Espere un momento, por favor.',mtInformation,[mbCancel]);
   ProgressBar:=TProgressBar.Create(FormProgressBar);
   timer:=TTimer.Create(FormProgressBar);

   with(FormProgressBar)do
      try
         tag:=15;
         Caption:='Generando Listado...';
         Height:=100;

         with ProgressBar do begin
            Name:='ProgressBar';
            Parent:=FormProgressBar;
            Max:=FormProgressBar.Tag;
            Step:=1;
            Top:=50;
            Left:=8;
            Width:=FormProgressBar.ClientWidth-16;
         end;
           with timer do begin
            Interval:=1000;
            OnTimer:=dialogtimer;   // ---> Aca encuentro uno de mis      problemas, no tengo un dialog timer 
         end;

         case ShowModal of
            ID_CANCEL: //
         end;

      finally
          timer.OnTimer:=nil;
        Free;
      end;

// Mi segunda duda... cuándo haría el Preview? (Reflexiones abajo)
   QuickRAlumno.Preview;

Reflexiones: Si lo hago después del dialog va a tardar igual pero sin mostrar la barra de progreso que quiero, si lo hago antes de crear el dialog tarda la creacion del reporte y despues muestra la barra de progreso... o sea tengo que hacerlo en pararlelo... con threads??

Me fui para el lado de los tomates? Quizás estoy totalmente perdida

Gracias!
Responder Con Cita
  #5  
Antiguo 24-02-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Revisa el ejemplo, correlo y lo entenderás mejor.
Saludos

Última edición por Caral fecha: 25-02-2008 a las 00:46:44.
Responder Con Cita
  #6  
Antiguo 26-02-2008
marlulipe marlulipe is offline
No confirmado
 
Registrado: jun 2007
Posts: 16
Poder: 0
marlulipe Va por buen camino
Question

Muchas gracias Caral, el ejemplo me sirvio mucho para entenderlo. EL problema que se presenta ahora es que la consulta a la BD la puedo hacer antes o despues de mostrar el dialog con el progress bar, y es esa consulta la que consume tiempo. Quisiera que mientras se realiza la consulta se muestre el cartel de espera... sino el tiempo consumido es el tiempo q tarda la consulta mas el tiempo del dialog... no resulta algo real.

Para ese caso tendría que crear un nuevo thread sobre el cual ejecutar o la consulta o el dialog... es decir hacer las cosas en paralelo... o puede haber otra forma?

Gracias por su ayuda!
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
Barra de progreso al compactar Aprendiendo Conexión con bases de datos 2 02-05-2007 21:42:32
Barra de progreso con TNMFTP pborges36 Internet 1 30-06-2006 01:50:03
Realizar una barra de progreso pepecharlie67 Varios 3 29-12-2005 14:08:39
Mostrar progreso de descarga de IndyFTP con barra de progreso devicer Internet 2 05-12-2005 15:59:32
barra de progreso en developer Sostratov Oracle 1 03-09-2004 16:48:43


La franja horaria es GMT +2. Ahora son las 17:51:53.


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