Problemas de pintado

Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

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.
Image

¿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.
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Amigo....

Post by leandro »

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... :D
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 ]
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

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
Hola Antonio,
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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

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 ?
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.

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.
> ¿Para que se usa la variable nPaintCount

Para que llamadas a <oWnd>:ReleaseDC() no destruyan el hDC antes de tiempo
Despues de preguntar lo miré y me dí cuenta para que se usa cuando vi ReleaseDC.

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
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

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: :oops:

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
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Paco, Carlos,

No sabemos cual puede ser la causa de ese efecto y por eso es dificil poder arreglarlo.

Es como si no se estuviesen procesando algunos mensajes EraseBkGnd, pero el caso es que algunos sí se procesan. Ojalá entre todos encontremos una solución.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

Gracias Antonio, entiendo que es dificil dar con la causa, paciencia y ojala pronto salga el detalle... me pregunto, a los que les ha pasado, pasa con harbour y xharbour?
salu2
paco
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

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 :shock:

Un saludo,

Carlos
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Post by horacio »

En la clase TGraph sucede lo mismo que lo descripto en este post. Yo utilizo TSBrowse para los browser y no tiene ese problema. Supuse que era un problema de los controles de terceros pero no es así. Porque algunos controles padecen ese problema y otros no ???
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

horacio wrote: Porque algunos controles padecen ese problema y otros no ???
¡La pregunta del millón! Si supieramos la respuesta este hilo no existiría.
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
Post Reply