Shell   16-09-2021, 14:42
#1
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.

Código:
Private cuentasegundos As Integer

Public Sub Form_Open()

  Randomize
    
  With Timer1
    .Delay = 1000
    .Start()
  End With
   
   'Código que se quiera añadir. Como es el del evento activate para probar efecto
   
End

Public Sub Timer1_Timer()

  If cuentasegundos = 2 Then
    Timer1.Stop
    Me.Close
  Else
    cuentasegundos += 1
  Endif

End

Public Sub Form_Activate()

  Dim ppicture As New Picture
  Dim nomimagenes As String[]
  Dim ruta As String
 
  'Sin la creación de un paquete de instalación, temporalmente uso el directorio de la aplicación para las imágenes
  ruta = Application.Path &/ "Imagenes/"   
  nomimagenes = Dir(ruta, "*.png")
 
  ppicture = Picture.Load(ruta & nomimagenes[Rand(nomimagenes.Max)])

  With PictureBox1
    .Picture = ppicture   
    .Expand = True
  End With

  With Me
    .Center()
    .Arrangement = Arrange.Fill
    .W = ppicture.W
    .H = ppicture.H
  End With

End

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
Archivos adjuntos
.gz
FormularioCentradoImagen-0.0.1.tar.gz (Tamaño: 57.59 KB Descargas: 1)
Última modificación: 16-09-2021, 19:41 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   16-09-2021, 15:54
#2
Pues yo no veo el load por ninguna parte... Huh Huh

No podemos regresar
Shell   16-09-2021, 19:41
#3
(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

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   21-09-2021, 12:27
#4
¿ 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

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   21-09-2021, 12:42
#5
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

No podemos regresar
Shell   21-09-2021, 13:26
#6
(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

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.