Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Refrescar ventana (https://www.clubdelphi.com/foros/showthread.php?t=59300)

Vlady 21-08-2008 21:26:17

Refrescar ventana
 
Hola amigos del club delphi.
Tengo el siguiente inconveniente, en un form que es mi ventana principal se crean en tiempo de ejecución unos botones de diferentes colores dependiendo del valor de un campo devuelto por una consulta, a medida que el usuario trabaja en la aplicación dependiendo de lo q realice yo recorro todos los botones y mediante la consulta actualizo su color el problema es que estos botones pueden variar y pueden llegar a ser hasta 200 o 300 y en el momento de hacer el recorrido de todos los botones para actualizar los colores esto se vulve demasiado lento o en el momento en que se habre una ventana y se cierra sobre los botones estos se van dibujando uno a uno de forma muy lenta y esto empeora a medida que hay mas botones, he intentado con la clausula

Application.ProcessMessages;
Pero esta no me ha servido para optimizar la actualizacion de cada boton no se que forma existe para hacer esto de forma mas rapida o tiene que ver con la velocidad del video del computador y como puedo mejorar esto.

Utilizo delphi 7 y firebird 2.0.

Gracias

maeyanes 21-08-2008 21:30:28

Hola...

Necesitas que los botones se actualicen una vez mostrados?

Por que podrías actualizarlos en el evento OnCreate de la forma o en OnShow... así cuando la forma se muestre los botones ya tendrían su color....


Saludos...

Vlady 21-08-2008 22:12:24

los botones se actualizan bien y esto lo hago mediante un procedimiento por que los botones no se actualizan solo cuando se crea el formulario sino tambien cunando se da clic sobre uno de ellos

felipe88 21-08-2008 23:22:00

Por Dios... que clase de Software maniaco es ese :eek::D... que tal un timer...

Vlady 21-08-2008 23:34:41

No es maniaco simplemente cada boton representa un almacen de venta y se quiere saber dependiendo del color su estado

felipe88 21-08-2008 23:45:08

Cita:

Empezado por Vlady (Mensaje 308700)
No es maniaco simplemente cada boton representa un almacen de venta y se quiere saber dependiendo del color su estado

:D:D... pero si me genera una inquietud, que depronto tanto refresh cause una sensacion molesta en pantalla al usuario, no crees?

Delphius 22-08-2008 02:23:41

Prueba estableciendo la propiedad DoubleBuffered del Form aTrue.

Si no es eso, habría que ver como estás implementando el algoritmo y ver de que manera se puede mejorar.

Saludos,

Vlady 22-08-2008 15:14:35

Gracias delphius lo de DoubleBuffered := true; ya lo habia intentado lo que he notado es q inclusive cuando se minimiza y se restaura la ventana los botones tardan en refrescarse asi no se cambien de estado. Cuando se hace clic sobre un boton abre una ventana y en el momento en q se cierra se hacer la actualizacion de todos los botones osea q no es siempre.

roman 22-08-2008 16:18:55

¿Qué tipo de botones estás usando? ¿Cómo es que se actualiza la ventana cada vez que se abre una por encima, lo tienes en el evento OnPaint del formulario? ¿La rutina que pinta todos los botones, lo hace sin fijarse si realmente necesita cambiarle el color?

// Saludos

Vlady 22-08-2008 16:32:38

Cita:

Empezado por roman (Mensaje 308800)
¿Qué tipo de botones estás usando? ¿Cómo es que se actualiza la ventana cada vez que se abre una por encima, lo tienes en el evento OnPaint del formulario? ¿La rutina que pinta todos los botones, lo hace sin fijarse si realmente necesita cambiarle el color?

// Saludos

Los botones que utilizon son los de TMS TAdvGlowButton, pero el retardo en la actualizacion de los botones es aunque nose aplique el algoritmo de actualizacion, es decir con solo minimizar y restaurar la ventana existe el retardo de actualizacion de de los botones los cuales se van haciendo uno por uno. No es tanto la rutina que pinta los botones sino la velocidad con que se actualiza la ventana.

maeyanes 22-08-2008 19:38:14

Hola...

Pues entonces es problema de los botones esos que dices... ¿has probado usando los botones estándar de la VCL?



Saludos...

jcarlos.matrix 17-12-2008 23:04:18

tengo un problema similar
 
mira. yo estoy haciendo algo parecido
yo creo botones dentro de cada celda de un stringrid utilizando una estructura
asi:
type
botones = record
ren_stringgrid : integer;
col_stringgrid : integer;
caption : string;
color : string;
boton : Tbutton;
end;

creo el boton dentro de la celda del stringgrid y guardo en donde quedo renglon y columna, tambien cuando estoy creando el boton, en su evento onclick le asigno su procedimiento onclick.

y puedo bajar y subir el programa sin que tenga problemas con el refrescamiento. mi problema que es cuando cambio el tamano de la ventana y se activa el scroll del stringgrid ya no refresca los botones.

help me.

Lepe 18-12-2008 11:20:05

Está claro que algo de tu código está enviando a pintar cada botón por separado y de ahí la lentitud. Por norma general, sólo se debería enviar a pintar una sola vez, o llamar a Invalidate para que la aplicación sepa lo que ha de actualizar.

Sin código no podemos decirte nada.

Saludos


La franja horaria es GMT +2. Ahora son las 00:24:53.

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