FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Un bug de hace mucho tiempo en FWH
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 08:12 AM
Nuestro querido Paco García me envió un email hace unos dias pues descubrió un bug que ha estado en FiveWin desde su comienzo y que es la causa de que las dimensiones en píxeles en los diálogos no funcionen correctamente:

Code (fw): Select all Collapse
METHOD cToChar( cCtrlClass ) CLASS TControl

   local n := GetDlgBaseUnits()

   DEFAULT cCtrlClass := ::ClassName(),;
           ::cCaption := "",;
           ::nId      := ::GetNewId(),;
           ::nStyle   := nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP )

return cCtrl2Chr( Int( 2 * 8 * ::nTop    / nHiWord( n ) ),;
                  Int( 2 * 4 * ::nLeft   / nLoWord( n ) ),;
                  Int( 2 * 8 * ::nBottom / nHiWord( n ) ),;
                  Int( 2 * 4 * ::nRight  / nLoWord( n ) ),;
                  ::nId, ::nStyle, cCtrlClass, ::cCaption )


Esos "2" no son necesarios y esa es la razón por la que las dimensiones de los pixeles no son respetadas.

Le estoy muy agradecido a Paco por su gran ayuda al descubrir este bug que lleva desde el inicio de FiveWin.

Ahora tenemos que decidir que hacer. Hemos de mantener compatibilidad hacia atras, así que él me propuso una nueva claúsula:

In dialog.ch
Code (fw): Select all Collapse
#xcommand DEFINE DIALOG <oDlg> ;
             [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
             [ TITLE <cTitle> ] ;
             [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ;
             [ SIZE <nWidth>, <nHeight> ] ;
             [ <lib: LIBRARY, DLL> <hResources> ] ;
             [ <vbx: VBX> ] ;
             [ STYLE <nStyle> ] ;
             [ <color: COLOR, COLORS> <nClrText> [,<nClrBack> ] ] ;
             [ BRUSH <oBrush> ] ;
             [ <of: WINDOW, DIALOG, OF> <oWnd> ] ;
             [ <pixel: PIXEL> ] ;
             [ ICON <oIco> ] ;
             [ FONT <oFont> ] ;
             [ <help: HELP, HELPID> <nHelpId> ] ;
             [ <transparent: TRANSPARENT> ] ;
             [ GRADIENT <aGradColors> ] ;
             [ <lTruePixel: TRUEPIXEL>  ] ;
       => ;
          <oDlg> = TDialog():New( <nTop>, <nLeft>, <nBottom>, <nRight>,;
                 <cTitle>, <cResName>, <hResources>, <.vbx.>, <nStyle>,;
                 <nClrText>, <nClrBack>, <oBrush>, <oWnd>, <.pixel.>,;
                 <oIco>, <oFont>, <nHelpId>, <nWidth>, <nHeight>, <.transparent.>,;
                 <aGradColors>, <.lTruePixel.> )


y en dialog.prg

Code (fw): Select all Collapse
Dialog.prg

   DATA   lTruePixel AS LOGICAL INIT .F.

   METHOD New( nTop, nLeft, nBottom, nRight, cCaption, cResName, hResources,;
               lVbx, nStyle, nClrText, nClrBack, oBrush, oWnd, lPixels,;
               oIco, oFont, nHelpId, nWidth, nHeight, lTransparent, aNewGradColors, lTruePixel ) CONSTRUCTOR

METHOD New( nTop, nLeft, nBottom, nRight, cCaption, cResName, hResources,;
            lVbx, nStyle, nClrText, nClrBack, oBrush, oWnd, lPixels,;
            oIco, oFont, nHelpId, nWidth, nHeight, lTransparent, aNewGradColors, lTruePixel ) CLASS TDialog

   DEFAULT hResources := GetResources(), lVbx := .f.,;
           nClrText   := GetSysColor( COLOR_BTNTEXT ), nClrBack := GetSysColor( COLOR_BTNFACE ),;
           lPixels    := .f., nTop := 0, nLeft := 0, nBottom := 10, nRight := 40,;
           nWidth     := 0, nHeight := 0, lTransparent := .f.,;
           nStyle     := nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU ),;
           lTruePixel := .f.

   ::lTruePixel = lTruePixel


In control.prg
Code (fw): Select all Collapse
METHOD cToChar( cCtrlClass ) CLASS TControl

   local n := GetDlgBaseUnits()

   DEFAULT cCtrlClass := ::ClassName(),;
           ::cCaption := "",;
           ::nId      := ::GetNewId(),;
           ::nStyle   := nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP )

return cCtrl2Chr( Int( if(::oWnd:lTruePixel,1,2) * 8 * ::nTop    / nHiWord( n ) ),;
                  Int( if(::oWnd:lTruePixel,1,2) * 4 * ::nLeft   / nLoWord( n ) ),;
                  Int( if(::oWnd:lTruePixel,1,2) * 8 * ::nBottom / nHiWord( n ) ),;
                  Int( if(::oWnd:lTruePixel,1,2) * 4 * ::nRight  / nLoWord( n ) ),;
                  ::nId, ::nStyle, cCtrlClass, ::cCaption )


me gustaría conocer vuestras opiniones antes de proceder a implementarlo, gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 08:58 AM

Me parece perfecto.
Por defecto existe la compatibilidad hacia atrás y a partir de ahora podemos hacer los diálogos 'correctamente'.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 09:49 AM

La solución parece que es la correcta.

Y con tiempo, nosotros ya iremos cambiando los valores de las ventanas.

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 01:02 PM

Antonio,

No entiendo muy bien cual es el cambio. ¿Por qué se multiplicaba por 2?

Y si se soluciona, que diferencia notaríamos, es decir, en qué influye exactamente.

Si pudieras poner un ejemplo, te lo agradecería.

Un Saludo,

Joaquín Martínez
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 01:10 PM

Buena caza ! Felicidades para Paco García....

¿ Sería este el motivo por el que las "sizes" para los controles hay que multiplicarlos por x 2 cuando se crean por codigo y no es en el ON INIT ? Hablo de cabeza... sí sé seguro que según ON INIT o no había que multiplicar x 2.

Por cierto... ¿ las pruebas del arreglo se han realizado con dialogos con controles creados por codigo en el ON INIT y antes del ON INIT ? A ver si va a ser necesario el x 2 en algun caso...

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 02:47 PM

Antonio, me parece la solucion mas adecuada

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 555
Joined: Wed Jul 31, 2013 01:14 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Fri Nov 07, 2014 07:27 PM

Hola: Es posible que en dialog.prg este faltando la variable cVarName antes de lTruePixel?

Saludos

Dario Fernandez

FWH 2501, Harbour, MVS2022 Community, MySql & MariaDB, Dbf/Cdx VSCode.

Maldonado - Uruguay
Posts: 505
Joined: Sat Apr 22, 2006 09:09 AM
Re: Un bug de hace mucho tiempo en FWH
Posted: Sat Nov 08, 2014 11:13 AM

Hola Antonio:

Yo opino que la solución más correcta es la que por defecto se tenga que poner los valores correctos y si le ponemos la clausula que comentas se ajuste a lo anterior, que creo que es lo que propones.

Creo que esto resuelve el problema que te planteaba por el 2009 en viewtopic.php?f=6&t=14561, y como sabes soy muy torpe, me podrías indicar si hago los cambios que dices en los tres archivos lo que resulta es que hay que corregir las coordenadas o no. O dicho de otra forma que cambios hay que introducir para que desde el principio se pongan las coordenadas correctas.

Un saludo

Y buen trabajo.

Carlos

Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Sat Nov 08, 2014 02:07 PM

Yo estoy de acuerdo con colthop . Lo correcto sería que partir de ahora usáramos los diálogos correctamente y poner la cláusula si queremos compatibilidad.
para los desarrollos abandonados y compilados no tiene influencia y para los desarrollos a mantener se pone la cláusula en todos los diálogos fácilmente con cualquier editor , para lo nuevo se hace correctamente.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Mon Nov 10, 2014 07:12 AM

Carlos,

No podemos romper compatibilidad hacia atras. Es una regla de oro :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 505
Joined: Sat Apr 22, 2006 09:09 AM
Re: Un bug de hace mucho tiempo en FWH
Posted: Mon Nov 10, 2014 08:52 AM

Hola Antonio:

Creo que no rompes compatibilidad hacia atrás si le das la posibilidad de dejarlo como está con una opción, además se producía un efecto cuando Refrescabas cualquier variable que te la mostraba con las dimensiones reales, por ejemplo yo ponía 10 de alto porque en realidad eran 20 y si esa variable no se refrescaba (:Refresh()) no pasaba nada pero si cambiaba su valor y la refrescabas quedaba a la mitad. Por eso mi comentario a favor de que el defecto sea lo correcto y con la posibilidad de hacer que te valga lo anterior. Por otra parte creo que no quedaría bien que en una explicación de una función se dijese que "Para poder ver las variables en su tamaño real tienen que dividir por 2 las dimensiones sino pongan la clausula X" o "Por defecto la clausula X se tiene que poner para mostrar las dimensiones reales, sino mostrará las dimensiones multiplicadas por 2".

Es una opinión, yo tuve que dejar de usar los DIALOG por eso y usar las WINDOWS que o tenían ese efecto.

Un saludo

Carlos

Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Mon Nov 10, 2014 02:41 PM

Carlos,

No descarto el que llegue a ser la opción correcta por defecto la que usemos.

Pero de momento, durante varias versiones lo mantendremos asi para no romper nada... :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 555
Joined: Wed Jul 31, 2013 01:14 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Tue Nov 11, 2014 03:00 PM

Hola amigos:

Se usa asi ? oDlg:lTruePixel := .T.

Gracias.

Pregunto porque hice los cambios y no veo la diferencia.

Dario Fernandez

FWH 2501, Harbour, MVS2022 Community, MySql & MariaDB, Dbf/Cdx VSCode.

Maldonado - Uruguay
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Tue Nov 11, 2014 07:38 PM

Ruben,

Aún no está implementado. Lo incluiremos en el próximo build de FWH

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 555
Joined: Wed Jul 31, 2013 01:14 PM
Re: Un bug de hace mucho tiempo en FWH
Posted: Wed Nov 12, 2014 02:56 PM

Gracias Maestro.

Saludos

Dario Fernandez

FWH 2501, Harbour, MVS2022 Community, MySql & MariaDB, Dbf/Cdx VSCode.

Maldonado - Uruguay