PDA

Ver la Versión Completa : Programa comando


Diegoval
03-06-2004, 20:47:00
Hola foro!

Les comento mi problema:

Tengo un programita comando que recibe dos parametros...bueno... eso es lo de menos porque eso funciona todo bien, el problema los tengo al hacer lo siguiente:

en el evento OnShow del formulario principal tengo código que procesa los parametros ingresados (todo esto mostrando una barra que muestra como va el progreso...), el problema es que se ejecuta primero el código y luego muestra el formulario, es decir una vez que sale del método OnShow recién ahí muestra en la pantalla el form.

Una solución seria poner algo como un TTimer con un intervalo de 2 segundos y habilitarlo en el OnShow, pero me parece medio feo, seguramente debe haber algo mejor...

Bueno, muchas gracias...
Diego.

delphi.com.ar
03-06-2004, 20:55:30
No entiendo muy bien el planteo, pero no puedes cargar las cosas antes de hacer un Form.Show??


¿Qué es un programa comando?

roman
03-06-2004, 21:05:25
en el evento OnShow del formulario principal tengo código que procesa los parametros ingresados (todo esto mostrando una barra que muestra como va el progreso...), el problema es que se ejecuta primero el código y luego muestra el formulario, es decir una vez que sale del método OnShow recién ahí muestra en la pantalla el form.


Esto lo hemos tratado anteriormente. Lo que yo hago es definir un mensaje personalizado, digamos CM_AFTERSHOW. En el evento OnShow hago un 'post' de dicho mensaje:

PostMessage(Handle, CM_AFTERSHOW, 0, 0);

y en el manejador de dicho mensaje hago los cálculos.

Al usar PostMessage en lugar de SendMessage te aseguras de que el mensaje no comienza a procesarse sino hasta que se terminen de procesar los mensajes que ya haya en la cola de mensajes, lo cual incluye todos los necesarios para que el formulario termine de cargarse.

// Saludos

eduarcol
03-06-2004, 22:24:03
To lo haria en el dpr, algo asi


Application.Initialize;
Application.ProcessMessages;
//Carga la pantalla de progreso
Progreso := TProgreso.Create;
try
Progreso.Show;
if not ObRutinas.EjecutarParametros then
ObRutinas.msgError( msErrorParametros );
finally
FreeandNil(Progreso);
end;

Amilius
03-06-2004, 23:12:39
¿Que tal con una ventana auxiliar (un form simple que no es creado al inicio) que muestre el estado de avance del cálculo?

Yo hice esto y funcionó muy bien, en el onCreate del form principal:

- Creas la ventana auxiliar (Ojo, es un form que NO se crea al inicio, eso te fijas en el "proyect source").
- actualizas la barra de progreso en la ventana las veces necesarias.
- Eliminas la ventana auxiliar.

Además, eventualmente te servirá como "splashscreen" de esas que muestran el avance de la carga del programa, gráficos, sonidos, etc.

vecino
04-06-2004, 00:00:22
Hola:

Hay muchas formas de conseguir lo que quieres, además de lo que ya te han explicado los compañeros, también te puede servir algo muy sencillo, poner el código en el OnActivate en lugar de en el OnShow. Sólo debes de controlar que no vuelva a pasar por ese evento más de una vez (por si acaso pulsa en otra ventana y luego vuelve de nuevo a ella).

Saludos.