Problemas de pintado

Postby Carlos Mora » Mon Aug 27, 2007 10:21 pm

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.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Amigo....

Postby leandro » Mon Aug 27, 2007 11:04 pm

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 AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1649
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Postby Antonio Linares » Mon Aug 27, 2007 11:37 pm

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

Postby Carlos Mora » Wed Aug 29, 2007 7:28 am

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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Antonio Linares » Wed Aug 29, 2007 7:36 am

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

Postby Carlos Mora » Wed Aug 29, 2007 10:02 am

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 algunos casos, 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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby cuatecatl82 » Thu Aug 30, 2007 5:23 pm

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

Postby Francisco Horta » Thu Aug 30, 2007 8:21 pm

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

Postby Antonio Linares » Thu Aug 30, 2007 10:22 pm

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

Postby Francisco Horta » Thu Aug 30, 2007 10:27 pm

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

Postby Carlos Mora » Fri Aug 31, 2007 7:55 am

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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby horacio » Sat Sep 01, 2007 12:30 pm

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 ???
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Postby Carlos Mora » Sat Sep 01, 2007 2:32 pm

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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Enrico Maria Giordano, Google [Bot] and 69 guests