Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2006
muntasil muntasil is offline
Registrado
 
Registrado: jul 2006
Posts: 6
Poder: 0
muntasil Va por buen camino
Formulario de espera con barra de progreso

Hola, mi problema, (no sé si habrá resuelto en anteriores post, aunque he estado buscando y no le he encontrado) es que necesito que se muestre un formulario con una barra de progreso a modo de espera ante un proceso de otro formulario que no se de antemano cuanto tiempo puede tardar.

Es algo parecido a enviar un correo electronico. Se pulsaría un botón y mientras se envia ese correo electrónico, para que no parezca a ojos del usuario que la aplicación se ha quedado colgada, quiero que otro form en el que se muestra un icono animado y una barra de progreso (que mediante un Timer voy incrementando y decrementando) se muestre hasta que termine de enviarse el correo.

En realidad no es que quiera enviar un correo electronico, pero es para que os hagais la idea de lo que necesitaria.

Muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 26-07-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Crea un nuevo formulario que sea 'Modal'.

Utiliza un procedimiento CMAfterShow (puedes buscar ayuda adicional sobre este tema en el foro).
Código Delphi [-]
private
  procedure CMAfterShow(var Msg: TMessage); message CM_AFTERSHOW;

En el evento OnShow del nuevo form deberás poner
Código Delphi [-]
procedure TForm_con_Barra.FormShow(Sender: TObject);
begin
  PostMessage(Self.Handle, CM_AFTERSHOW, 0, 0);
end;

Y en el procedimiento CMAfterShow ya ejecutas el código que quieras incrementando la barra o cualquier código que quieras ejecutar. Al final del código deberás poner Self.Close; para que cuando se termine de ejecutar tu código la ventana se cierre sola y vuelvas a la ventana que lo llamó.

Código Delphi [-]
procedure TForm_con_Barra.CMAfterShow(var Msg: TMessage);
begin
  ..
  Tu Código
  ..
  Self.Close;
end;

Al ser una ventana modal, se impedirá clickear con el ratón en ningún otro sitio más que dentro de esa ventana, y al no poner ningún botón de cierre o parecido, hasta que no finalice el proceso de tu código, la ventana con la barra no se cerrará.

Si quieres mejorarlo, puedes interceptar la tecla ESC y ejecutar un nuevo evento que cierra tu ventana con barra, y/o deberás interceptar Ctrl-F4 propio del windows para decidir que quieres hacer si el usuario quiere cerrar la ventana con la barra de progreso mientras se esté ejecutando.

Espero haberte ayudado.

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 26-07-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Se me olvidó que deberás declarar esta constante
Código Delphi [-]
const
  CM_AFTERSHOW = WM_USER + 1;
dentro del form con la barra de progreso.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 26-07-2006
muntasil muntasil is offline
Registrado
 
Registrado: jul 2006
Posts: 6
Poder: 0
muntasil Va por buen camino
Muchisimas gracias lo probaré y mañana te cuento.

De nuevo gracias.
Responder Con Cita
  #5  
Antiguo 27-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En realidad el mensaje cmAfterShow se usa cuando se quiere hacer algo que lo impide el evento que se quiere usar, Me explico:

Si queremos ocultar una ventana en el evento OnShow, Delphi nos dirá que no podemos hacerlo, en ese caso creamos el mensaje anterior y ya podemos ocultar la ventana en el AfterShow.

En este caso, creo que se puede hacer de otra forma y ahorrarnos un mensaje.
Simplemente llamas a la rutina con ShowModal, y creas un procedimiento público en esa ventana para incrementar la barra de progreso:

Código Delphi [-]
procedure TForm1.IncPg(valor:integer);
begin
  progressbar1.position := valor;
  Form1.Update;
end;

La explicación de que guglu haya usado esa técnica creo deducir cual es:
Código Delphi [-]
procedure TForm_con_Barra.CMAfterShow(var Msg: TMessage);
begin
  progressbar1.position := valor;
  Form1.Update;// Delphi no nos deja usar esta 
//                linea en el evento OnShow (creo recordar)

end;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 27-07-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
El problema que se presenta con la opción que dá Lepe es que la ventana que creas se va a quedar abierta hasta que el usuario opte por cerrarla.

Lo que entiendo que se pretende es que se cree una nueva ventana con una barra de progreso que vaya indicando algo, y que al finalizar el proceso se cierre sola.

Y el problema entonces es que en el evento OnShow (o alguno parecido) no puedes cerrar la ventana con Close, por lo que a mi entender se hace necesario el método con AfterShow.
__________________
Piensa siempre en positivo !
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 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
ayuda con un barra de progreso (Gauge) jorch_yr Internet 1 31-12-2003 11:49:38


La franja horaria es GMT +2. Ahora son las 23:51:14.


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