Comunidad Gambas-es

Versión completa: Evento Open y Activate
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas!.

Buscando una aplicación que hace uso de una base de datos, encontré un error en como presentaba un formulario al comenzar la aplicación.
Se trata de que al iniciar la aplicación muestre un formulario con una imagen y luego se cierre el formulario dando paso a otro formulario.

Lo extraño fue. Que ese formulario de presentación al mostrar la imagen, el formulario se iba a la esquina superior izquierda y no se centraba.
Ese código estaba en el evento Open. Puede que del cambio de QT4 a QT5 haya influido. La hice en el 2016.

Os muestro un ejemplo parecido al del formulario.

GAMBAS
  1. Private cuentasegundos As Integer
  2.  
  3. Public Sub Form_Open()
  4.  
  5.     
  6.   With Timer1
  7.     .Delay = 1000
  8.     .Start()
  9.    
  10.    'Código que se quiera añadir. Como es el del evento activate para probar efecto
  11.    
  12.  
  13. Public Sub Timer1_Timer()
  14.  
  15.   If cuentasegundos = 2 Then
  16.     Timer1.Stop
  17.     Me.Close
  18.   Else
  19.     cuentasegundos += 1
  20.  
  21.  
  22. Public Sub Form_Activate()
  23.  
  24.   Dim ppicture As New Picture
  25.   Dim nomimagenes As String[]
  26.   Dim ruta As String
  27.  
  28.   'Sin la creación de un paquete de instalación, temporalmente uso el directorio de la aplicación para las imágenes
  29.   ruta = Application.Path &/ "Imagenes/"   
  30.   nomimagenes = Dir(ruta, "*.png")
  31.  
  32.   ppicture = Picture.Load(ruta & nomimagenes[Rand(nomimagenes.Max)])
  33.  
  34.   With PictureBox1
  35.     .Picture = ppicture   
  36.     .Expand = True
  37.  
  38.   With Me
  39.     .Center()
  40.     .Arrangement = Arrange.Fill
  41.     .W = ppicture.W
  42.     .H = ppicture.H
  43.  



Como veis el Timer se dispara en el evento Load, en realidad antes se ejecuta el evento actviate y luego va al código del timer.
Podría hacer que el código de mostrar la imagen fuese en el load, pero entonces no estaría centrado el formulario.

Espero no repetirme, ya que puede parecer común.

Saludos
Pues yo no veo el load por ninguna parte... Huh Huh
(16-09-2021, 15:54)Shordi escribió: [ -> ]Pues yo no veo el load por ninguna parte.

Ups, quise decir Open. Angel
(Creo que Form_Load me viene de Visual Basic)

Para nota curiosa he probado el código en el evento Open del formulario en la Gambas 3.15.2 y funciona.
En cambio en la Gambas 3.16.x tengo que usar el código en el evento Activate para que funcione.
Si ya decía yo que esto lo había visto funcionar.

Algo tuvo que cambiar en la Gambas 3.16.

Saludos
¿ Nada ?. 

Ni un siquiera, es más recomendable que uses el evento Activate por bla, bla, bla. Wink

Esto la única forma siempre será verlo ejecutando la aplicación. El problema es que con el tiempo cuando ya
has creado la aplicación te encuentres que en una nueva versión del lenguaje no funcione algo que ya te funcionaba con anterioridad.

En ese caso, los usuarios te avisarían, vale. Y el desarrollador lo verá cuando pase "el plumero".  ( Si se acuerda ).
Pero imaginemos que la aplicación es mucho más compleja. Pues habrá que rezar a "San Isidoro de Sevilla". ( El ciberpatrono ), allá por el 2001.
 
Cita:El Papa Juan Pablo II considera nombrar a San Isidoro de Sevilla el santo patrono de los usuarios de la Internet y de los programadores de computación, dijeron el martes fuentes del Vaticano.

Ya ha llovido desde entonces.

No me quejo de  que por actualizar a la 3.16.x esto haya dejado de funcionar. Más bien en un error de un mal uso de "algo" del lenguaje por parte del desarrollador
(mía) que di por entendido que funcionaba así...pues a larga no era así. Que en parte a lo mejor el propio desarrollador principal lo vea mejor de esa forma.
O algo cambió a la larga de una nueva instalación o actualización del sistema. Librerías y demás.

- Error de diseño.
- Obsolescencia de diseño.

Saludos
Cita:Ni un siquiera, es más recomendable que uses el evento Activate por bla, bla, bla.
Es que tú te respondías solito...

El evento Open se dispara al abrir un form. No puedes crear objetos en ese evento y querer que se muestren antes de que se muestre el formulario. Para mí el misterio es que te funcionase antes.
Habría que probar qué ocurre si creas los objetos en el evento _New, que se dispara al crear la instancia del form y les das características en el open...
Personalmente nunca he utilizado el evento Activate... para esas cosas hay otro parecido: Show

Saludos
(21-09-2021, 12:42)Shordi escribió: [ -> ]Es que tú te respondías solito...

En parte era por haceros hablar y dar vidilla. ( Se me ha visto el plumero). Angel
 
Cita:Personalmente nunca he utilizado el evento Activate... para esas cosas hay otro parecido: Show

Es que Show es una "composición" de varios eventos. Smile

Saludos