Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Desaparecen los botones (https://www.clubdelphi.com/foros/showthread.php?t=74701)

Panasys 06-07-2011 01:11:25

Desaparecen los botones
 
Hola amigos, tengo una aplicacion con un timer que se ejecuta y cada un segundo corre una funcion, ademas la aplicacion utiliza sockets se comunica con otros dispositivos, hasta aca todo bien :D

El problema es que en algunos momentos (mi aplicacion tiene sobre la derecha una panel con algunos botones como Reconexion, Enviar a la Tray, Cerrar App) literalmente desaparecen ! :confused:

Si les paso el puntero del mouse voila! Aparecen! y otra vez por un rato no pasa nada hasta que desaparecen nuevamente.

Utilizo Delphi 7 :eek: sobre Windows 7. :cool:

Alguien puede tirarme una soga? No encuentro algo similar, si pongo Double Buffer el comportamiento del form es medio erratico.

Un abrazo y gracias ! :D

Neftali [Germán.Estévez] 06-07-2011 11:01:23

Tal vez no da tiempo a realizar determinadas tareas y el redibujado del form no da tiempo a que se haga correctamente.

Sólo para probar aumenta el tiempo del timer.
Tienes algun for o bucle que haga mucho trabajo.

Si lo tienes añade algun:

Código Delphi [-]
Application.ProcessMessages;

Panasys 06-07-2011 15:09:51

Si, lo tengo, un condicional que chequea 64 variables que levanta de un archivo y luego de procesar la informacion lee un dispositivo via red y si hay una variable modificada escribe nuevamente el archivo, es un proceso medio largo para un segundo.

Voy a leer sobre tu propuesta, no se que es lo que hace pero ya mismo le consulto al amigo F1 :D

Millon de gracias y un abrazo.

Neftali [Germán.Estévez] 06-07-2011 15:17:48

Cita:

Empezado por Panasys (Mensaje 405633)
...un condicional que chequea 64 variables que levanta de un archivo y luego de procesar la informacion lee un dispositivo via red y si hay una variable modificada escribe nuevamente el archivo, es un proceso medio largo para un segundo.

Pues sí va a ser largo para 1 sg. :D:D:D

Más que nada por los accesos a disco que son bastante lentos, y ya no hablesmos del acceso por red.

Tal vez debverías empezar a revisar Threads.

Panasys 06-07-2011 18:08:27

Si Neftali, debo aprender sobre hilos, y estoy en eso, sacare ahora la version sin hilos :rolleyes: y creare una nueva version correjida con hilos, ya que no llego con los tiempos :D

Pero cambio todo con Application.ProcessMessages; y utilice las recetas que aparecen en el foro. No sabia nada de esto ni como realmente funciona windows con los mensajes.

Asi que el resultado es mas que positivo !!! :D

Mejoramos con Delphi y aprendimos mas de windows tambien !!! (un gran dia):cool:

De todas formas debo dedicarle tiempo a aprender a manejar hilos para que la applicacion este bien hecha.

Muchas gracias.

Saludos !!

Neftali [Germán.Estévez] 07-07-2011 10:07:46

Cita:

Empezado por Panasys (Mensaje 405642)
Pero cambio todo con Application.ProcessMessages; y utilice las recetas que aparecen en el foro. No sabia nada de esto ni como realmente funciona windows con los mensajes.
Asi que el resultado es mas que positivo !!! :D

Básicamente se trata de que todo lo que se hace en Windows es utilizando mensajes. Simplificando, hay una cola donde todo lo que debes hacer se coloca allí, hasta el pintado de los botones.
Si haces demasiadas cosas, al sistema no le da tiempo de procesar esos mensajes y pasan cosas como lo que a tí te sucede, que los botones no se redibujan.
Cuando utilizas:
Código Delphi [-]
  Application.ProcessMessages

Indicas al sistema de forma expresa que procese mensajes de la cola. A veces interesa y a veces no.


La franja horaria es GMT +2. Ahora son las 04:33:02.

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