• Domingo 22 de Diciembre de 2024, 14:55

Autor Tema:  Duda Con Splashscreen  (Leído 1910 veces)

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Duda Con Splashscreen
« en: Domingo 25 de Mayo de 2008, 16:03 »
0
Hola a todos.
Verán hice un programa un poco denso que necesita cargar bastantes datos antes de mostrar el form principal, asi que me hice una clase SplashScreen.

Mi clase crea un form, barra de progreso, un par de labels y hace fades al aparecer y desparecer.

Mi problema es que cuando la inicio, tengo que poder esperar a que el fade de aparicion se complete para poder mandarle datos y que actualize la progressbar.

Es decir, que el form  termine de aparecer en pantalla antes de hacer nada más.

Porque ahora mismo, tengo en el form_load del form principal una llamada a esa clase y despues todas las operaciones de carga del programa, pero cuando inicia la splashscreen inmediatamente sigue ejecutando por la instruccion siguiente sin esperar a que el timer que hace el fade de aparicion se pare.

Pueden decirme como puedo hacer eso ?

Gracias

abel_cuentas_b

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Duda Con Splashscreen
« Respuesta #1 en: Lunes 26 de Mayo de 2008, 03:24 »
0
hola, no estoy muy seguro pero creo que debes utilizar hilos, te impulsa a que busques en google acerca de este tema, creo que te puede servir, saludos

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Duda Con Splashscreen
« Respuesta #2 en: Martes 27 de Mayo de 2008, 11:58 »
0
Es más sencillo de lo que pueda parecer.

1 ) Añade un módulo e incluye en él una rutina 'main'
Código: Text
  1.  
  2. public sub main
  3.  
  4. end sub
  5.  
  6.  

2 ) Ahora ve a las propiedades del proyecto e indícale que la carga inicial se hace desde 'Main'.

3 ) Ya carga el proyecto desde main, esto sirve para que llames al formulario es decir tu 1ª instrucción debería ser form1.show (ojo no hagas un form1.showdialog)

4 ) En la carga de formulario no debería haber código, o al menos no código pesado, para que arranque lo rápido que tu quieras.

5 ) Al término de carga de tu formulario, se regresa al main, ahora procesa todo eso que deseas, es decir debes trasladar todo eso que haces en el formulario principal en el evento load a una rutina del módulo main o del propio formulario... supongamos que hasta ahora lo tienes en el load: tomas ese código y lo metes en una rutina de nombre por ejemplo :
Código: Text
  1.  
  2. public function carga_Previa() as boolean
  3.    ' el código que quieres ejecutar...
  4. end function
  5.  
  6.  
Entonces en main lo que haces es una llamada a esa rutina, pero justo después de que el formulario se ha cargado completamente y está visible.

Así te quedaría al final algo como:
Código: Text
  1.  
  2. public sub main
  3.     form1.show
  4.     call    form1.carga_Previa
  5. end sub
  6.  
  7.  
No se te ocurra poner en el main debajo de la instrucción de llamada a la funcion carga_Previa la instrucción end, porque el programa se cerraría, en 'end' sólo debe ponerse cuando se arranca desde 'main' pero el formulario es modal es decir se lo llamó como: 'form1.showdialog', que al caso no nos vales porque tenemos que ejecutar una rutina justo tras ser cargado el formulario. Aunque  siempre podríamos hacer esto otro:
 
Código: Text
  1.  
  2. public sub main
  3.     form1.show
  4.     call    form1.carga_Previa
  5.     form1.showdialog
  6.     end
  7. end sub
  8.  
  9.  
Pero lo veo redundante....

Si necesitas algún acondicionamiento previo a la llamada del formulario, posiblemente necesites 'traspasar' declaraciones de variables desde el formulario al módulo, para que estas estén disponibles antes de que se cargue el formulario.
«Ma non troppo»
----> ModoVacaciones = False<----

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Duda Con Splashscreen
« Respuesta #3 en: Sábado 31 de Mayo de 2008, 04:55 »
0
Al final opte por usar threads creando una splash y desde ella una vez cargados todos los datos el hilo "principal" del programa pasandole los datos pertinentes.

Gracias por la ayuda.

Salu2