FWH - Nueva Clase TOutLook2003

Postby Antonio Linares » Fri Sep 14, 2007 9:42 pm

Podriais hacer la siguiente prueba ? Aqui no conseguimos hacerlo fallar

En la clase TWindow Method paint():
Code: Select all  Expand view  RUN
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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Carlos Mora » Fri Sep 14, 2007 9: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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Antonio Linares » Fri Sep 14, 2007 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Alfredo Arteaga » 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.
User avatar
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

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

Postby Francisco Horta » Fri Sep 14, 2007 10:42 pm

Antonio,
probando el cambio de la clase twindow en el metodo paint persiste el problema

Image

salu2
paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

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

Postby Antonio Linares » Sat Sep 15, 2007 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Sat Sep 15, 2007 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby A&C » 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
User avatar
A&C
 
Posts: 214
Joined: Sat Aug 19, 2006 1:37 pm
Location: Chile

Postby Antonio Linares » Sat Sep 15, 2007 1:27 pm

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

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

Postby Francisco Horta » Mon Sep 17, 2007 3: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
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby Antonio Linares » Mon Sep 17, 2007 4: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Francisco Horta » Mon Sep 17, 2007 6:05 pm

Probare Antonio, voy a cambiar mi codigo para poner la imagen en el area de cliente, aver como adapto eso,
Gracias
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 83 guests