Inestabilidad en el tamaño de los dialogos

Inestabilidad en el tamaño de los dialogos

Postby quique » Sat Jun 28, 2008 2:25 am

¿Por que el tamaño de los diálogos es inestable al momento de crearlos?

Tengo el siguiente código
Code: Select all  Expand view  RUN
function main()
local oWnd, oMenu
   menu oMenu
      menuItem "&Dialogo" action dialogo()
   endMenu
DEFINE WINDOW oWnd menu oMenu
activate window oWnd
return nil

function dialogo
   local oDlg, oMenu
   menu oMenu
      menuItem "&nHeight" action msgInfo( oDlg:nHeight )
   endMenu
   define dialog oDlg size 100,100
   activate dialog oDlg nowait on init oDlg:setMenu( oMenu )
return nil

Si al correr el programa lo primero que hago es crear un diálogo me dice que tiene un tamaño de 134, pero si muevo la ventana en ocaciones los crea de 132 y en ocaciones de 134, los tamaños son los mismos mientras no mueva la ventana, pero cada vez que la muevo puede que cambie entre uno y otro, inclusive si comparo las ventanas se puede ver que las de 132 si son mas pequeñas que las de 134. Los tamaños tampoco son siempre los mismos, porque en el programa que lo detecté me daba 134 y 136, no eran las mismas líneas exactamente, pero la idea era esa, una ventana con una opción del menú que abre un diálogo con menú y también para probar le di tamaño de 100,100.

¿Es un bug de fivewin o hay manera de saber cuando dará un tamaño y cuando otro?

No creo que vaya por ahí, pero tengo winXP corriendo en AMD Turion 64 x2
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Postby Antonio Linares » Sat Jun 28, 2008 10:34 am

Quique,

El tamaño de los diálogos se especifica en coordenadas "lógicas" que posteriormente Windows transforma a pixeles teniendo en cuenta el font usado, y de esa forma el establece una determinada proporcionalidad.

El API de Windows proporciona varias funciones para comprobar esos factores de conversión:
The GetDialogBaseUnits function returns the dialog box base units used by Windows to create dialog boxes. Both Windows and applications use these units to convert the width and height of dialog boxes and controls from dialog units, as given in dialog box templates, to pixels, and vice versa.

Para "saltarte" ese proceso que realiza Windows de forma automática, establece el tamaño desde la cláusula ON INIT del diálogo:

ACTIVATE DIALOG oDlg ON INIT oDlg:SetSize( nWidth, nHeight )
regards, saludos

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

Postby quique » Sat Jun 28, 2008 6:12 pm

Gracias Antonio, tan simple como eso, perdí muchas horas tratando de ver combinaciones en la definición y nunca se me ocurrio intentar ahí. Debido a la estructura del programa no es factible aplicarlo en el ON INIT, pero me diste la orientación de por donde buscar y ya quedó listo y funcionando :)
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am


Return to FiveWin para Harbour/xHarbour

Who is online

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