FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour FWH - Nueva Clase TOutLook2003
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 09:42 PM
Podriais hacer la siguiente prueba ? Aqui no conseguimos hacerlo fallar

En la clase TWindow Method paint():
static lPainting := .f.

if ! lPainting
   lPainting = .T.
else
   MsgBeep()
endif

...
if lPainting
   lPainting = .F.
endif

La idea es comprobar si los mensajes WM_PAINT pueden llegar mientras aún se está procesando uno anterior
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 09:47 PM

Bueno, tal como habia anticipado, es una tontería. Los amigos de moc.eviflanac me dieron la solución:
"Hola amigos

La solucion es devolver un 0 en el metodo display.

Duerman tranquilos

menos mal. Mi agradecimiento y reconocimiento. Juntos vamos mejor.

Un saludo,

Carlos

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 09:57 PM

Bueno, hemos localizado un ordenador en el que falla.

La prueba anterior no llega a sonar, luego los mensajes WM_PAINT no llegan recursivamente.

Si se desactiva el doble buffer, entonces casi deja de fallar. Lo que esté fallando se incrementa al usar el doble buffer.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 10:07 PM

Carlos,

En el problema del brush en la ventana principal, devolver un cero no lo soluciona

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 326
Joined: Sun Oct 09, 2005 05:22 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 10:28 PM

En realidad no me preocupa, he vivido con eso mas de cinco años. Si algun usuario quejoso me reclama le digo que es problema de su equipo (si le gusta que lo use y si no que busque otra opción).

Pero sería bueno solucionarlo.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 10:36 PM

Alfredo,

Nos gustaría solucionarlo y ojalá lo consigamos. De todas formas parece que está muy relacionado con la versión de Windows y con la velocidad del ordenador.

En Vista 32 con un Core Duo no hay forma de hacerlo fallar. Y es el mismo EXE que falla en otro ordenador con XP y más lento.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 10:42 PM
Antonio,
probando el cambio de la clase twindow en el metodo paint persiste el problema



salu2
paco
____________________

Paco
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Fri Sep 14, 2007 10:48 PM

Comparando Vista con XP, resulta que en Vista no nos envian mensajes WM_PAINT cuando movemos otra ventana por encima de la nuestra. Es algo que han arreglado en Vista: detectan si no ha cambiado la imagen de la ventana y se ahorran de enviar y procesar mensajes WM_PAINT.

En cambio en XP, si nos envian mensajes WM_PAINT cuando movemos otra ventana por encima.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Sat Sep 15, 2007 07:51 AM

Posiblemente estamos tratando dos problemas distintos:

Hemos modificado FWH para que siempre devuelva cero al tratar el mensaje WM_PAINT. Eso debería arreglar el problema de pintado de los controles pero no soluciona el problema del pintado del brush de la ventana principal

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Sat Sep 15, 2007 07:58 AM
PROBLEMA SOLUCIONADO:

Efectivamente Paco tenía razón y faltaba ese cero. La cuestión es donde ponerlo correctamente:

En la clase TWindow:

METHOD EndPaint() INLINE ::nPaintCount--,;
EndPaint( ::hWnd, ::cPS ), ::cPS := nil, ::hDC := nil, 0

Observen el cero al final. Problema del brush solucionado! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 214
Joined: Sat Aug 19, 2006 01:37 PM
FWH - Nueva Clase TOutLook2003
Posted: Sat Sep 15, 2007 12:43 PM

ANTONIO

Hemos modificado FWH para que siempre devuelva cero al tratar el mensaje WM_PAINT. Eso debería arreglar el problema de pintado de los controles

a q te refieres con lo anterior, lo del agregar un CERO a EndPaint como indicaste soluciono el problema,, aunque se genera un pequeño retardo en el pintado,, es como si ese cero agregado relentizara el pintado,, pero no falla .....

a parte de ese CERO hay algun cambio mas ???? como dijiste hemos modificado FWH.... o solo te referias el agregar el cero como indicaste--

GRACIAS

Mi segundo amor es Programar
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Sat Sep 15, 2007 01:27 PM

Solo hay que añadir ese cero al final en EndPaint()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
FWH - Nueva Clase TOutLook2003
Posted: Mon Sep 17, 2007 03:45 PM

Antonio fijate que probe haciendo el cambio de ponerle el cero (el de la sugerencia fue carlos, no yo, jeje) en el endpaint(), y no me va, sigue pintando mal, y aparte me bloquea el sistema completo... asi tengo mi codigo

DEFINE WINDOW oWnd TITLE oVarSys:NomSys MDI MENU MiMenu() ICON oIcon

.......
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON PAINT Showlogo(oWnd, nColor)

Function ShowLogo(oWnd, nColor)
Local oBmp, cFile, _nFil, _nCol, aCoors := GetCoors( GetDesktopWindow() ) // la pos 3 y 4 dan la resolucion de pantalla

cFile := "Fondo1024.jpg"

_nFil := GetWndRect(GetDesktopWindow())[3]
_nCol := GetWndRect(GetDesktopWindow())[4]

If File(cFile)
    @ 0,0 Image oBmp OF oWnd:oWndClient ;
                     NOBORDER PIXEL SIZE _nCol,_nFil
    oBmp:LoadImage(,cFile)
    oBmp:refresh()
 Else
    FillWnd( oWnd:oWndClient, nColor )
 Endif

return nil

Que estoy haciendo mal?
Gracias
Paco

____________________

Paco
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
FWH - Nueva Clase TOutLook2003
Posted: Mon Sep 17, 2007 04:01 PM

Paco,

Prueba a no llamar a ShowLogo()

Paco, tu código crea un control cada vez que se pinta la ventana!!!
@ 0,0 Image oBmp ...
Eso jamas se debe hacer

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
FWH - Nueva Clase TOutLook2003
Posted: Mon Sep 17, 2007 06:05 PM

Probare Antonio, voy a cambiar mi codigo para poner la imagen en el area de cliente, aver como adapto eso,
Gracias
Paco

____________________

Paco