Un bug de hace mucho tiempo en FWH

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Un bug de hace mucho tiempo en FWH

Post by Antonio Linares »

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

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

#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

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

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
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Un bug de hace mucho tiempo en FWH

Post by FiveWiDi »

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 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Re: Un bug de hace mucho tiempo en FWH

Post by fgondi »

La solución parece que es la correcta.

Y con tiempo, nosotros ya _ los valores de las ventanas.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Re: Un bug de hace mucho tiempo en FWH

Post by jmartial »

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
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Un bug de hace mucho tiempo en FWH

Post by hmpaquito »

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...
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Un bug de hace mucho tiempo en FWH

Post by cnavarro »

Antonio, me parece la solucion mas adecuada
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
D.Fernandez
Posts: 392
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay
Contact:

Re: Un bug de hace mucho tiempo en FWH

Post by D.Fernandez »

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

Saludos
Dario Fernandez
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
colthop
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Un bug de hace mucho tiempo en FWH

Post by colthop »

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 http://forums.fivetechsupport.com/viewt ... =6&t=14561, y como sabes soy muy torpe, me podrías indicar si hago _ 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.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Un bug de hace mucho tiempo en FWH

Post by mastintin »

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

Re: Un bug de hace mucho tiempo en FWH

Post by Antonio Linares »

Carlos,

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

Antonio Linares
www.fivetechsoft.com
colthop
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Un bug de hace mucho tiempo en FWH

Post by colthop »

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

Re: Un bug de hace mucho tiempo en FWH

Post by Antonio Linares »

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
D.Fernandez
Posts: 392
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay
Contact:

Re: Un bug de hace mucho tiempo en FWH

Post by D.Fernandez »

Hola amigos:

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

Gracias.

Pregunto porque hice _ y no veo la diferencia.
Dario Fernandez
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Un bug de hace mucho tiempo en FWH

Post by Antonio Linares »

Ruben,

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

Antonio Linares
www.fivetechsoft.com
D.Fernandez
Posts: 392
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay
Contact:

Re: Un bug de hace mucho tiempo en FWH

Post by D.Fernandez »

Gracias Maestro.

Saludos
Dario Fernandez
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
Post Reply