Hola compañeros, estoy usando un TPicture como un botón en un programa táctil, el problema es que tengo que pulsar y esperar un poco para la siguiente pulsación, me podríais indicar como eliminar este retardo.
el problema es que pruebo estos nuevos componentes que acabo de terminar, en mi pantalla táctil y claro si pulsas varias veces seguidas, no registra bien , si lo hago despacio, si, por eso comento lo del retardo, de todas maneras subo imagen y enlace de los componentes, si este problema tiene solución sería lo adecuado subirlos ya corregidos al FTP
Imagen de los cuatro componentes
el PanelTouchDate pueden ver su código en https://gist.github....onymous/6917736
el PanelTouchDouble en https://gist.github....onymous/6917794
el PanelTouchTime en https://gist.github....onymous/6917817
y por último el PanelTouchInteger en https://gist.github....onymous/6917842
Como siempre sois libres de usarlos sin ninguna restricción por mi parte, pero me gustaria saber si es posible corregir este defecto, que creo que existe
Como siempre gracias por vuestra colaboración.
Por qué hay retardo en TImagen
Comenzado por
Desart
, oct 10 2013 07:27
4 respuestas en este tema
#1
Escrito 10 octubre 2013 - 07:27
#2
Escrito 14 octubre 2013 - 03:07
Supongo que la actualización de la imagen "congela" el hilo de ejecución un instante, así que yo probaría a hacer esa actualización dentro de otro hilo solo para eso, y dejar lo de incrementar el valor interno en el hilo principal, de esa forma si haces varios clicks seguidos la variable se actualiza instantáneamente, pero las imagenes lo hacen cuando puedan.
Si no te quieres complicar tanto la vida, coloca 10 imagenes donde vaya cada dígito y juega solo con visible false o true para que sea visible el correcto en cada momento, eso será más rápido pero gastará mucha memoria, claro.
Y una tercera opcion mezclando las dos cosas sería un "triple" buffer: creas 3 imagenes para cada dígito, y cargas el numero anterior (no visible), actual (visible) y posterior (no visible), así al pedirle el "siguiente" tienes la imagen siguiente ya cargada y solo cambias los visibles, luego "desplazas" las otras 2 imagenes a su nueva posición y cargas la que queda vacía: si ves un 5, tienes almacenada 4,5,6, con la de en medio siempre visible, y al ir al siguiente, los "rotas" a 5,6,vacio, y el hilo adicional sería el encargado de cargar el 7 en la imagen que quedó vacia.
Hay muchas técnicas del estilo... una imagen grande con todos los dígitos y usar CopyRect, convertir tus imagenes a fonts (esa es la mejor, por cierto), etc... ya depende, hay que complicarse lo mínimo pera que vaya fluido.
Si no te quieres complicar tanto la vida, coloca 10 imagenes donde vaya cada dígito y juega solo con visible false o true para que sea visible el correcto en cada momento, eso será más rápido pero gastará mucha memoria, claro.
Y una tercera opcion mezclando las dos cosas sería un "triple" buffer: creas 3 imagenes para cada dígito, y cargas el numero anterior (no visible), actual (visible) y posterior (no visible), así al pedirle el "siguiente" tienes la imagen siguiente ya cargada y solo cambias los visibles, luego "desplazas" las otras 2 imagenes a su nueva posición y cargas la que queda vacía: si ves un 5, tienes almacenada 4,5,6, con la de en medio siempre visible, y al ir al siguiente, los "rotas" a 5,6,vacio, y el hilo adicional sería el encargado de cargar el 7 en la imagen que quedó vacia.
Hay muchas técnicas del estilo... una imagen grande con todos los dígitos y usar CopyRect, convertir tus imagenes a fonts (esa es la mejor, por cierto), etc... ya depende, hay que complicarse lo mínimo pera que vaya fluido.
#3
Escrito 14 octubre 2013 - 08:12
Hola Sergio gracias por tu respuesta, pero los dígitos son valores de un tLAbel y la imagen es fija, en cada botón, lo que si puede estar ocurriendo (pienso yo), que en el evento OnPaint, tiene que volver a cargarlas todas y por eso puede ser la tardanza, tendré que hacer pruebas en cuanto pueda y mirarlo bien.
muchas gracias por tu colaboración.
muchas gracias por tu colaboración.
#4
Escrito 15 octubre 2013 - 03:01
Si cada boton tiene su glyph cargado, son muchas repeticiones del mismo gráfico en memoria, eso puede beberse la RAM. Prueba con un TImageList con las imagenes y luego usarlas en los botones -no recuerdo qué tipo de botón admite ImageList y cual no- eso reduciría la carga muchisimo.
#5
Escrito 15 octubre 2013 - 10:32
Gracias Sergio, he optado por hacer lo siguiente y a mejorado mucho el rendimiento, he cogido y he añadido una variable, en el OnPaint si esta es false no carga la imagen si es true, si y sólo se pone en true cuando cargamos una imagen, realmente son dos imágenes una para los upButton y otra para los DownButtons.