Page 2 of 2

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 3:59 pm
by acuellar
Distinguidos

Porqué desde recursos definido con TAB no funciona el Mouse?
Code: Select all  Expand view

REDEFINE FOLDEREX oFld ID 110 OF oDlg PIXEL ROUND 5 UPDATE PROMPT "&Personal", "&Empresarial" DIALOGS "PERSONAL","EMPRESARIAL"  
 


Pulsando Alt-E pasa, pero con el Mouse NO

Saludos,

Adhemar

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 4:32 pm
by jmartial
Buenas tardes Antonio,

Eso ya lo había probado, incluso antes del DispEnd(), pero tiene otro efecto colateral negativo y feo.

Si tienes un tfolderex con varias pestañas, con que pases el ratón por encima de las otras pestañas, a la vez que se pinta la rayita azul en la pestaña indicando que estas sobre ella y con cada cambio de cordenada del ratón encima de la pestaña, se repinta en el mismo número el diálogo.

Es decir, estás en la primera pestaña y pones el ratón encima de la 2ª y lo mueves de lado a lado de la pestaña sin salirte de ella y el parpadeo de los controles del
diálogo son bestiales.

Por eso, no lo ví una solución aceptable.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 4:34 pm
by jmartial
Adhemar,

No entiendo muy bien a qué te refieres, pero en los recursos hay que definirlo con el nombre de clase "TFolderex" y te debe funcionar.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 4:57 pm
by acuellar
Gracias Joaquin

Lo cree con Custom control y lo definí con la clase "TFolderex"

y funcionó.

Saludos,

Adhemar

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 5:31 pm
by jmartial
Antonio,

He hecho unos cambios a la clase y para mi gusto está al 95% solucionado, haciendo muchas tonterías con el ratón cambiando el tamaño del diálogo principal,
puede que tarde un momentillo en refrescarlo pero es muy difícil que pase y se aprecie.

Con estos cambios, no hay que cambiar el estilo del diálogo, y no parpadea constantemente con el movimiento del ratón:

Inicializar esta DATA:

Code: Select all  Expand view
DATA lOutCtrl AS LOGICAL INIT .T.   // New!


Cambiar este método:

Code: Select all  Expand view
METHOD MouseLeave( nRow, nCol, nFlags ) CLASS TFolderEx

   ::nOver    := 0
   ::lOutCtrl := .T.  // New!
   ::Refresh()

return nil


Cambiar este TROZO de método:

Code: Select all  Expand view
METHOD MouseMove( nRow, nCol, nFlags ) CLASS TFolderEx

   LOCAL lOverBmp := .F.
   LOCAL aBmpPos

  ::lOutCtrl := .F.  // New!
 
  if ::lWorking
      return NIL
  endif

  ...............
 



Cambiar este método:

Code: Select all  Expand view
METHOD Paint() CLASS TFolderEx

   LOCAL aInfo

   IF ::lWorking
      RETURN NIL
   ENDIF

   aInfo   := ::DispBegin()



   IF ::nLayOut == LAYOUT_TOP .OR. ::nLayOut == LAYOUT_BOTTOM
      ::PaintTB()
   ELSE
      ::PaintLR()
   ENDIF

   ::DispEnd( aInfo )

   if ::nOver==0 .and. ::lOutCtrl
      ::aDialogs[ ::nOption ]:Refresh()   // Nuevo !!!
   endif  
   

RETURN NIL
 



A ver que te parece, si ves una solución mejor me lo dices y la pruebo, o si retocando esta puede quedar al 100%.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 5:53 pm
by Antonio Linares
Joaquín,

Tu idea es buena, que la veo como repintar solo al no estar encima del folder.

Pero la pega que le veo es que si accedes al borde del diálogo sin haber pasado por el folder entonces no funcionaria.

Prueba cambiando el método Paint() de esta manera a ver si evita los parpadeos:

Code: Select all  Expand view
METHOD Paint() CLASS TFolderEx

   LOCAL aInfo

   IF ::lWorking
      RETURN NIL
   ENDIF

   aInfo   := ::DispBegin()

   IF ::nLayOut == LAYOUT_TOP .OR. ::nLayOut == LAYOUT_BOTTOM
      ::PaintTB()
   ELSE
      ::PaintLR()
   ENDIF

   ::aDialogs[ ::nOption ]:Refresh()

   ::DispEnd( aInfo )

RETURN NIL

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 6:24 pm
by jmartial
Antonio,

Si funciona porque lOutCtrl comienza como .T. , de todas maneras pruebaló, a mi me funciona.

Por otro lado, tu modificación ya te he comentado en otro mensaje, que lo había probado, tanto antes como después del DispEnd() y funciona con el parpadeo contínuo.

El parapadeo es porque tfolderex para pintar la rayita azul al pasar por una pestaña, repinta continuamente con el movimiento del ratón. Yo lo que intento
es sólo refrescar el diálogo cuando el ratón está fuera del tfolderex, es decir al hacer resize.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 7:55 pm
by Antonio Linares
Joaquín,

Si te funciona bien y soluciona el problema lo incluimos en FWH y mil gracias :-)

Pruébalo bien y tu mismo nos dices.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Thu Oct 09, 2014 9:38 pm
by jmartial
Antonio,

Necesito una ayudita para que funcione 100%. Estoy desesperado y no doy con la solución.

Explico lo que queda del bug:

Con las modificaciones anteriores, ya puede hacerse resize del diálogo PADRE y no se borra el interior del folderex.

Pero, al mover el ratón desde una pestaña hacia abajo, detecta que se sale del folderex y repinta, parpadeando.

El tema es que cuando está el ratón encima del diálogo, folderex no detecta que sigue estando encima suya, porque está encima del diálogo.

Siempre que hablo de diálogo, son los del interior del folderex, no del diálogo PADRE.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Mon Oct 13, 2014 5:38 pm
by jmartial
Antonio Buenas tardes,

Sigo con este problema, he encontrado una solucion que funciona muy bien, pero tiene un pequeño efecto colateral.

No hay que hacer ninguna de las modificaciones que puse, sólo esta nueva.

Como el problema era que desaparecía al hacer resize con el ratón, he añadido al final del método Default una sóla línea:

Code: Select all  Expand view
METHOD Default() CLASS TFolderEx
     
       .......................

      ::oWnd:OnResize :={|| ::aDialogs[ ::nOption ]:refresh() }

 



Y funciona de 10, sin ningún parapadeo, ahora, si el usuario ya había definido el codeblock del OnResize del Diálogo contenedor, se pierde su definición.

¿Se podrían sumar los 2 codeblocks? ¿ Que se ejecute el onResize definido previamente y éste después ?

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Mon Oct 13, 2014 6:38 pm
by hmpaquito
Si, asi:


Code: Select all  Expand view
METHOD Default() CLASS TFolderEx
     
       .......................
      Local bTmp:= ::oWnd:OnResize

     
      ::oWnd:OnResize :={|| If(bTmp != NIL, Eval(bTmp), NIL), ::aDialogs[ ::nOption ]:refresh() }

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Mon Oct 13, 2014 8:25 pm
by jmartial
Esa era mi pregunta,

Se puede hacer eval() dentro de un eval() ?

Probaré a ver que tal, Gracias.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Mon Oct 13, 2014 10:20 pm
by Antonio Linares
Joaquín,

Muy buena solución :-)