Un bug de hace mucho tiempo en FWH

Un bug de hace mucho tiempo en FWH

Postby Antonio Linares » Fri Nov 07, 2014 8: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: Select all  Expand view  RUN
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: Select all  Expand view  RUN
#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: Select all  Expand view  RUN
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: Select all  Expand view  RUN

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

Re: Un bug de hace mucho tiempo en FWH

Postby FiveWiDi » Fri Nov 07, 2014 8: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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1202
Joined: Mon Oct 10, 2005 2:38 pm

Re: Un bug de hace mucho tiempo en FWH

Postby fgondi » Fri Nov 07, 2014 9: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Un bug de hace mucho tiempo en FWH

Postby jmartial » Fri Nov 07, 2014 1: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Un bug de hace mucho tiempo en FWH

Postby hmpaquito » Fri Nov 07, 2014 1: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...
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Un bug de hace mucho tiempo en FWH

Postby cnavarro » Fri Nov 07, 2014 2: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
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Un bug de hace mucho tiempo en FWH

Postby D.Fernandez » Fri Nov 07, 2014 7:27 pm

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

Saludos
Dario Fernandez
FWH 24.09, Harbour, MVS2022 Community, BCC, MySql & MariaDB, Dbf/Cdx VSCode.
Maldonado - Uruguay
D.Fernandez
 
Posts: 488
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay

Re: Un bug de hace mucho tiempo en FWH

Postby colthop » 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.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Un bug de hace mucho tiempo en FWH

Postby mastintin » Sat Nov 08, 2014 2: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.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Un bug de hace mucho tiempo en FWH

Postby Antonio Linares » Mon Nov 10, 2014 7:12 am

Carlos,

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

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

Re: Un bug de hace mucho tiempo en FWH

Postby colthop » Mon Nov 10, 2014 8: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.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Un bug de hace mucho tiempo en FWH

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

Re: Un bug de hace mucho tiempo en FWH

Postby D.Fernandez » Tue Nov 11, 2014 3:00 pm

Hola amigos:

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

Gracias.

Pregunto porque hice los cambios y no veo la diferencia.
Dario Fernandez
FWH 24.09, Harbour, MVS2022 Community, BCC, MySql & MariaDB, Dbf/Cdx VSCode.
Maldonado - Uruguay
D.Fernandez
 
Posts: 488
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay

Re: Un bug de hace mucho tiempo en FWH

Postby Antonio Linares » Tue Nov 11, 2014 7:38 pm

Ruben,

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

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

Re: Un bug de hace mucho tiempo en FWH

Postby D.Fernandez » Wed Nov 12, 2014 2:56 pm

Gracias Maestro.

Saludos
Dario Fernandez
FWH 24.09, Harbour, MVS2022 Community, BCC, MySql & MariaDB, Dbf/Cdx VSCode.
Maldonado - Uruguay
D.Fernandez
 
Posts: 488
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay

Next

Return to FiveWin para Harbour/xHarbour

Who is online

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