Problemas de pintado
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Antonio,
He modificado el control que estoy haciendo para que no haga nada, salvo pintar el fondo. Al hacerlo (porque se descubre un trozo de ventana) pinta mal. Si se observa el método Paint, este es muy sencillo. Ojo que puede que no falle a la primera, hay que moverle otra ventana por encima y moverla lentamente. Ayuda bastante si tienes otros procesos en marcha, para complicarsela más.
¿Me podrías dar una pista de donde puede estar el problema? Insisto que el problema tambien se refleja en la barra de mensajes tal como se vé en los postings anteriores.
el enlace al zip con los fuentes (y el exe ya compilado)
http://www.box.net/shared/y8ujkuoeq1
A ver si me puedes ayudar, ya que esto me tiene frustrado y parado con el control.
Un saludo,
Carlos.
He modificado el control que estoy haciendo para que no haga nada, salvo pintar el fondo. Al hacerlo (porque se descubre un trozo de ventana) pinta mal. Si se observa el método Paint, este es muy sencillo. Ojo que puede que no falle a la primera, hay que moverle otra ventana por encima y moverla lentamente. Ayuda bastante si tienes otros procesos en marcha, para complicarsela más.
¿Me podrías dar una pista de donde puede estar el problema? Insisto que el problema tambien se refleja en la barra de mensajes tal como se vé en los postings anteriores.
el enlace al zip con los fuentes (y el exe ya compilado)
http://www.box.net/shared/y8ujkuoeq1
A ver si me puedes ayudar, ya que esto me tiene frustrado y parado con el control.
Un saludo,
Carlos.
Amigo....
Amigo no se si te sirva, pero descargue tu control y a mi NO me pasa lo que estas diciendo, pase varias ventanas por encima y no me da el error de pintado.. excelente trabajo...
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Carlos,
En tu clase TOutLook2 prueba a quitarle el doble buffer en el pintado:
// local aInfo:= ::DispBegin()
...
// ::DispEnd( aInfo )
Cuando se llega a producir un error de ese tipo de pintado, normalmente se debe a que se ha empleado demasiado tiempo en el proceso de pintado y algunos mensajes de Windows no se han llegado a procesar
En tu clase TOutLook2 prueba a quitarle el doble buffer en el pintado:
// local aInfo:= ::DispBegin()
...
// ::DispEnd( aInfo )
Cuando se llega a producir un error de ese tipo de pintado, normalmente se debe a que se ha empleado demasiado tiempo en el proceso de pintado y algunos mensajes de Windows no se han llegado a procesar
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Hola Antonio,Antonio Linares wrote:Carlos,
Cuando se llega a producir un error de ese tipo de pintado, normalmente se debe a que se ha empleado demasiado tiempo en el proceso de pintado y algunos mensajes de Windows no se han llegado a procesar
como habrás notado he capado el código de los botones para que haga todo rápido, y solo he dejado el pintado del fondo, lo cual es mucho más liviano que pintar/repintar el fondo del xBrowse, sin embargo el problema persiste, obviamente con mucha menos frecuencia.
¿Hay forma de saber si algún mensaje de Windows no se ha procesado?
¿Para que se usa la variable nPaintCount? He visto que se incrementa en el beginPaint y decrementa en el endpaint
Saludos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Carlos,
> ¿Hay forma de saber si algún mensaje de Windows no se ha procesado?
Hay quecrear un fichero login a disco con todos los mensajes que se reciben y con todos los valores que se devuelven. No es simple y además eso enlentece aún más el proceso de mensajes. Has probado a quitar el pintado a doble buffer como te indiqué anteriormente ?
> ¿Para que se usa la variable nPaintCount
Para que llamadas a <oWnd>:ReleaseDC() no destruyan el hDC antes de tiempo
> ¿Hay forma de saber si algún mensaje de Windows no se ha procesado?
Hay quecrear un fichero login a disco con todos los mensajes que se reciben y con todos los valores que se devuelven. No es simple y además eso enlentece aún más el proceso de mensajes. Has probado a quitar el pintado a doble buffer como te indiqué anteriormente ?
> ¿Para que se usa la variable nPaintCount
Para que llamadas a <oWnd>:ReleaseDC() no destruyan el hDC antes de tiempo
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Si, fue una de las primeras cosas que probé. Mejora en _, pero cuando el pintado es complejo me falla igual. Lo que más me llama la atención es que falla cuando la ventana es de otro proceso. Si es una ventana propia no falla nunca.Antonio Linares wrote:
> ¿Hay forma de saber si algún mensaje de Windows no se ha procesado?
Hay quecrear un fichero login a disco con todos los mensajes que se reciben y con todos los valores que se devuelven. No es simple y además eso enlentece aún más el proceso de mensajes. Has probado a quitar el pintado a doble buffer como te indiqué anteriormente ?
Respecto de ver generar el log con los eventos, tambien lo hice y creo que es lo que voy a hacer para ver si el proceso de pintado es interrumpido en algun momento. El punto es como saber si algún WM_PAINT no me ha llegado, que lo veo dificil.
Despues de preguntar lo miré y me dí cuenta para que se usa cuando vi ReleaseDC.> ¿Para que se usa la variable nPaintCount
Para que llamadas a <oWnd>:ReleaseDC() no destruyan el hDC antes de tiempo
Seguiremos investigando. La verdad es que en el trabajo la plantilla todavia no está completa por las vacaciones y hoy los clientes me están matando!
Ya te comentaré las pruebas a ver si puedo hacer algo más. Sino tendré que mudar la programación a C, al menos del pintado. Lo que me tiene perdido es que es un pintado muy sencillo como para que falle. Y ese fallo tambien se produce en la barra de mensajes, que es un control bastante sencillo y no debería dar problemas. Cuando se trata de controles nativos de Windows no hay ningun problema, es decir que en algo estoy fallando.
Un saludo,
Carlos
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
Estimados Colegas:
Aproposito de Pintado de Controles:
Esto pasa con una simple ventana Principal y un Brush estilo Borland, Bricks, Tiled o cualquiera de los tipos de Pintado, abro la calculadora de Guindows o cualquier otra ventana ajena a mi sistema a 32bits y deja el fondo asi, y si tiene un dialogo abierto tambien lo borra:
32bits:
http://img267.imageshack.us/my.php?image=dibujosl9.jpg
Cosa rara, con Clipper y Fivewin a 16bits no pasa esto: alguien sabe porque y como solucionarlo..?
16Bits:
http://img262.imageshack.us/my.php?image=dibujocf5.jpg
Aproposito de Pintado de Controles:
Esto pasa con una simple ventana Principal y un Brush estilo Borland, Bricks, Tiled o cualquiera de los tipos de Pintado, abro la calculadora de Guindows o cualquier otra ventana ajena a mi sistema a 32bits y deja el fondo asi, y si tiene un dialogo abierto tambien lo borra:
32bits:
http://img267.imageshack.us/my.php?image=dibujosl9.jpg
Cosa rara, con Clipper y Fivewin a 16bits no pasa esto: alguien sabe porque y como solucionarlo..?
16Bits:
http://img262.imageshack.us/my.php?image=dibujocf5.jpg
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
a mi tambien me pasa lo mismo, y pues decidi olvidarme de eso;
dejo imagen adjunta, unicamente tengo un degradado en la ventana principal, ya que si pongo una imagen esta se pierde casi por completo, a ver si por ahi salta la solucion..
http://img206.imageshack.us/my.php?image=pintadokq2.jpg
gracias
salu2
paco
dejo imagen adjunta, unicamente tengo un degradado en la ventana principal, ya que si pongo una imagen esta se pierde casi por completo, a ver si por ahi salta la solucion..
http://img206.imageshack.us/my.php?image=pintadokq2.jpg
gracias
salu2
paco
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Paco,
yo solo lo he probado con xHarbour que es lo que uso, aunque sospecho que no tiene nada que ver con el compilador, ya que es muy poco lo que podría cambiar entre uno y otro. Es un tema más bien de procesos y de mensajes, creo que hay algo que se está perdiendo duarante el proceso de pintado pero no logro darme cuenta exactamente qué, algo debe haber cambiado con el agregado de temas en windows o algo así.
Al menos ya han aparecido otros programas con el mismo problema, lo que me deja... no sé si tranquilo, porque preferiría que esto no ocurriese, pero es que estoy dándole vueltas al tema pensando que yo hacía algo mal en el pintado para que ocurriesen esas cosas. Al principio pensaba que me pasaba solo a mí y me estaba volviendo loco
Un saludo,
Carlos
yo solo lo he probado con xHarbour que es lo que uso, aunque sospecho que no tiene nada que ver con el compilador, ya que es muy poco lo que podría cambiar entre uno y otro. Es un tema más bien de procesos y de mensajes, creo que hay algo que se está perdiendo duarante el proceso de pintado pero no logro darme cuenta exactamente qué, algo debe haber cambiado con el agregado de temas en windows o algo así.
Al menos ya han aparecido otros programas con el mismo problema, lo que me deja... no sé si tranquilo, porque preferiría que esto no ocurriese, pero es que estoy dándole vueltas al tema pensando que yo hacía algo mal en el pintado para que ocurriesen esas cosas. Al principio pensaba que me pasaba solo a mí y me estaba volviendo loco
Un saludo,
Carlos
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
¡La pregunta del millón! Si supieramos la respuesta este hilo no existiría.horacio wrote: Porque algunos controles padecen ese problema y otros no ???
Cuando hice las pruebas, por ejemplo con TXBrowse, hay que esforzarse para que falle, y lo hace con mucha menor frecuencia, pero lo hace. Con esforzarse me refiero a superponer una ventana y moverla lentamente, de forma tal que se generen mensajes de pintado sucesivos y de regiones pequeñas.
Saludos,
Carlos