Page 1 of 2

Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 2:58 pm
by jmartial
Hola,

Ya he puesto en el foro este problema y no consigo respuesta de nadie.

¿Quien puede arreglar este bug de esta clase? Lo cierto es que así no se puede usar y entregar una aplicación a un cliente final.

El bug es el siguiente:

El contenido de una pestaña, desaparece, es decir no se repinta y se queda gris, o del color del folderex. Se reproduce intentando cambiar el tamaño de un
diálogo con el ratón con borde estilo ThickFrame. También desaparece en otras ocasiones pero no sé reproducirlo. A la clase TFolder no le ocurre.

Aquí una imágen antes de intentar cambiar el tamaño:

Image

Y Aquí como queda después de intentarlo:

Image

Por favor, a ver si hay manera de solucionarlo o si es una clase que no pertenece a Fivewin o no tiene mantenimiento, saberlo para no usarla.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 4:20 pm
by Antonio Linares
Joaquín,

Puedes mostrar el código fuente de como lo haces, o mejor aún, puedes proporcionar un ejemplo para probarlo aqui ? gracias

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 4:31 pm
by jmartial
Hola Antonio,

El código es redefinir desde recursos un TFolderex, y el diálogo el estilo WS_THICKFRAME.

Necesitaría un tiempo para preparar un ejemplo autocontenido, lo voy a intentar y lo paso a ver si se puede detectar de donde viene el problema.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 4:41 pm
by jmartial
Antonio,

Que va, desde recursos fallaba, pero desde código también.

Aquí tienes el ejemplo autocontenido:

Code: Select all  Expand view
#include "fivewin.ch"

Function errorFolderex()

    DEFINE DIALOG oDlg TITLE "I am a DialogBox" STYLE nOr(WS_POPUP,WS_THICKFRAME);
      FROM 0,0 TO 300, 400 PIXEL //
     
   
    @ 15, 20 FOLDEREX oFld SIZE 120, 100 OF oDlg PIXEL ROUND 5 UPDATE ;    
     PROMPT  "Option 1", "Option 2", "Option 3", "Option 2", "Option 2"
     
   
    @ 1, 1 BUTTON "&Botón que desaparecerá" SIZE 100, 20 OF oFld:aDialogs[1] PIXEL
           
   
    ACTIVATE DIALOG oDlg CENTERED

return nil

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 5:51 pm
by cnavarro
Puedes probarlo con la clase TCFolderEx que está en el repositorio de EReport a ver si te ocurre lo mismo?

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 6:00 pm
by karinha
Code: Select all  Expand view


#include "fivewin.ch"

Function NoerrorFolderex()

   local oFld

    DEFINE DIALOG oDlg TITLE "I am a DialogBox" STYLE nOr(WS_POPUP,WS_THICKFRAME);
      FROM 0,0 TO 300, 400 PIXEL //
     
   
    @ 15, 20 FOLDEREX oFld SIZE 120, 100 OF oDlg PIXEL ROUND 5 UPDATE ;    
     PROMPT  "Option 1", "Option 2", "Option 3", "Option 2", "Option 2"
     
    // Error
//  @ 10, 1 BUTTON "&Botón que desaparecerá" SIZE 100, 20 OF oFld:aDialogs[1] PIXEL

    // Correcto
    @ 120, 25 BUTTON "&Botón no desaparecerá" SIZE 100, 20 OF oDlg PIXEL
           
    ACTIVATE DIALOG oDlg CENTERED

return nil
 

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 8:49 pm
by jmartial
Cristobal,

Estuve viéndola, cambiaste el estilo del diàlogo de la pestaña, lo probé pero no va por ahí el problema.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 8:51 pm
by jmartial
Karhina,

Creo que no has leído cual es el problema o yo no entiendo que pretendes con ese cambio en el código.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Tue Oct 07, 2014 9:23 pm
by cnavarro
Joaquin
De momento puedes solucionarlo asi
Code: Select all  Expand view

Function NoerrorFolderex()

   local oFld
   local oDlg

    DEFINE DIALOG oDlg TITLE "I am a DialogBox" STYLE nOr(WS_POPUP,WS_THICKFRAME);
      FROM 0,0 TO 300, 400 PIXEL //
     
    @ 15, 20 FOLDEREX oFld SIZE 120, 100 OF oDlg PIXEL ROUND 5 UPDATE ;    
     PROMPT  "Option 1", "Option 2", "Option 3", "Option 2", "Option 2"
     
    @ 10, 1 BUTTON "&Botón que desaparecerá" SIZE 80, 20 OF oFld:aDialogs[1] PIXEL

    ACTIVATE DIALOG oDlg CENTERED ON PAINT oFld:aDialogs[1]:Refresh()   // AEVal( oFld:aDialogs, { |aD| aD:Refresh() } )

return nil

 

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 7:34 am
by jmartial
Buenos Días Cristobal,

Eso no es arreglar la clase para cualquiera de los folderex que uso en mi aplicación. Eso es una solución manual al ejemplo, para demostrar que la clase
no refresca cuando debe el diálogo hijo que está mostrando en la pestaña.

Lo que pido es un arreglo del bug a nivel interno de la clase, para poderla usar con confianza y considerarla una clase usable.

Gracias por tu interés.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 8:51 am
by Antonio Linares
Joaquín,

Asi puedes solucionarlo:

Code: Select all  Expand view
#include "fivewin.ch"

Function errorFolderex()

   local oDlg

   DEFINE DIALOG oDlg TITLE "I am a DialogBox" ;
      STYLE nOr( WS_POPUP, WS_THICKFRAME, WS_CLIPCHILDREN ) ;
      FROM 0,0 TO 300, 400 PIXEL
   
   @ 15, 20 FOLDEREX oFld SIZE 120, 100 OF oDlg PIXEL ROUND 5 UPDATE ;    
     PROMPT  "Option 1", "Option 2", "Option 3", "Option 2", "Option 2"
     
   @ 1, 1 BUTTON "&Botón que desaparecerá" SIZE 100, 20 OF oFld:aDialogs[1] PIXEL
   
   ACTIVATE DIALOG oDlg CENTERED

return nil

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 10:23 am
by jmartial
Antonio,

Ahora no me borra el interior del folderex (Correcto) pero no me pinta bien el resto de controles que están fuera del folderex y pertenecen al Diálogo (Incorrecto).

Creo que la solución está dentro del código de la clase Tfolderex.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 1:24 pm
by Daniel Garcia-Gil
Code: Select all  Expand view
#include "fivewin.ch"

Function main()

    DEFINE DIALOG oDlg TITLE "I am a DialogBox" STYLE nOr(WS_POPUP,WS_THICKFRAME, WS_CLIPCHILDREN);
      FROM 0,0 TO 300, 400 PIXEL //
     
   
    @ 15, 20 FOLDEREX oFld SIZE 120, 100 OF oDlg PIXEL ROUND 5 UPDATE ;    
     PROMPT  "Option 1", "Option 2", "Option 3", "Option 2", "Option 2"
     
   
    @ 1, 1 BUTTON "&Botón que desaparecerá" SIZE 100, 20 OF oFld:aDialogs[1] PIXEL
           
    @ 120, 25 BUTTON "&Botón no desaparecerá" SIZE 100, 20 OF oDlg PIXEL
   
    ACTIVATE DIALOG oDlg CENTERED

return nil


Saludos...

Esto me funciona perfectamente bien

jmartial wrote:Ahora no me borra el interior del folderex (Correcto) pero no me pinta bien el resto de controles que están fuera del folderex y pertenecen al Diálogo (Incorrecto).

Creo que la solución está dentro del código de la clase Tfolderex.

Analizo un poco lo que dices y las pregunta son, como podria estar el error en el folderex cuando dices que tienes problemas con los controles fuera del folderex...?
si eliminas el folderex con la solucion planteada sigues teniendo los problemas. ?
Para un mejor soporte trata detallar los "problemas" de los controles que tienes fuera del folderex

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 3:37 pm
by jmartial
Daniel Buenas tardes,

Voy a responderte a ver si me explico y le encuentro la solución.

1) Tengo unos diálogos desde Recursos, sin el estilo WS_CLIPCHILDREN con borde WS_THICKFRAME con un TGROUP, TSAYs ,TGETs y TFOLDER.
Si con enl ratón cambio el tamaño clickeando en el borde a derecha e izquierda, todo se repinta bien, el TFOLDER , TGROUP y resto de controles.

2) Cambio TFOLDER por TFolderEx porque me parece más bonita y original.
Si con el ratón cambio el tamaño clickeando en el borde a derecha e izquierda, todo se repinta bien, TGROUP y resto de controles. PERO la pestaña activa
del TFolderEx se borra.

3) Solución propuesta, poner estilo al diálogo padre WS_CLIPCHILDREN, se soluciona el problema de TFolderEx pero ahora descubro que el que no se repinta bien es
TGroup que está fuera del TFolderEx. Es decir TFolder se repintaba perfectamente y en las mismas condiciones TFolderEx No. Lo que significa que habría que hacer
que la clase TFolderEx se repintara bien aunque el diálogo padre no tenga el estilo WS_CLIPCHILDREN.

Este es el efecto que queda por culpa del TGROUP con estilo de diálogo WS_CLIPCHILDREN:

Image

La parte negra es porque he hecho resize con el ratón de izquierda a derecha hasta lo negro. Antes, se repintaba correctamente.

Gracias por tu atención y espero que ahora se entienda un poco mejor.

Re: Ayuda Bug TFolderEx, por favor

PostPosted: Wed Oct 08, 2014 3:56 pm
by Antonio Linares
Joaquín,

Con este pequeño cambio en la Clase TFolderEx se soluciona:

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 )

   ::aDialogs[ ::nOption ]:Refresh()   // Nuevo !!!

RETURN NIL