Comportamiento extraño por el uso de wbrwline.c

Comportamiento extraño por el uso de wbrwline.c

Postby tsales » Mon Feb 13, 2006 9:17 am

Antonio
En algunas ocasiones he reportado el comportamiento extraño en el repintado de ventanas con color de fondo, cuando otra ventana es movida por encima. Creo haber localizado el problema pero se escapa a mis conocimientos el poderlo solucionar. Proviene del uso de la clase TWbrose de Hernan y concrétamente la línea:

#define _PutSym( _SymEval ) hb_vmPushSymbol( &hb_symEval )

en el fichero "WBRWLINE.C".

Y como muestra un boton:

http://hyperupload.com/download/a680c984/Dibujo1.JPG.html

En la imagen se aprecian los residuos.

El codigo fuente utilizado es el siguiente, enlazando al mismo tiempo el fichero en "c" al buildx.bat :

echo wbrwline.obj + >> b32.bc
-----------------------------------------------------------------
#include "FiveWin.ch"

static oWnd

function Main()

local oWndEdit, oBar, oIcon, oImage
local cName := "FiveWin power"

DEFINE ICON oIcon RESOURCE "test"

DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70 TITLE "I am the MDI Frame" ;
COLOR "W+/R" ;
ICON oIcon

ACTIVATE WINDOW oWnd MAXIMIZED ;
VALID MsgYesNo( "Want to End ?" )

return nil
---------------------------------------------------------------------------

Saludos
Toni Sales
tsales
 
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Postby Antonio Linares » Mon Feb 13, 2006 10:20 pm

Toni,

En el ejemplo que proporcionas no estás usando el browse.

El problema proviene por una lentitud al procesar todos los mensajes de pintado que envia Windows, debido al uso del pintado a doble buffer.

Si en la Clase TWindow declaras los métodos DispBegin() y DispEnd() como VIRTUAL, entonces desaparecerá el problema, pero no tendrás pintado a doble buffer que elimina muchos parpadeos, pero tiene ese desagradable efecto, debido al tiempo que consume la maquina virtual de la aplicación.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41344
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby tsales » Tue Feb 14, 2006 7:44 am

Antonio Linares wrote:Toni,

En el ejemplo que proporcionas no estás usando el browse.

El problema proviene por una lentitud al procesar todos los mensajes de pintado que envia Windows, debido al uso del pintado a doble buffer.

Si en la Clase TWindow declaras los métodos DispBegin() y DispEnd() como VIRTUAL, entonces desaparecerá el problema, pero no tendrás pintado a doble buffer que elimina muchos parpadeos, pero tiene ese desagradable efecto, debido al tiempo que consume la maquina virtual de la aplicación.


Antonio
El tema es que si comenta la linea que te indico y sin usar el browse el repintado se realiza correctamente. Yo le he probado en 2 equipos diferentes con tarjetas de video + o - rápidas y en ambos casos el comportamiento es identico.
Con el problema del doble buffer se entendería un comporamiento lógico si tardando más, al final, lo repintara correctamente. Lo curioso es que cuando la ventana recibe el foco, esta se queda con los residuos hasta que se fuerza de alguna forma un repintado.

Saludos
Toni Sales
tsales
 
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Postby Antonio Linares » Tue Feb 14, 2006 12:20 pm

Toni,

Es como si se perdiesen mensajes de pintado, ya que si luego redimensionas la ventana ó la maximizas, se pinta correctamente.

Es un problema que comenzó con el pintado a doble buffer y que todavía no sabemos exactamente por qué ocurre.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41344
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 16 guests