Clausula Pixel

Clausula Pixel

Postby Sebastián Almirón » Fri Jul 09, 2021 4:45 pm

No se si me he perdido algo con la clausula PIXEL en los controles, pero hay algo que se me escapa, siempre he hecho mis aplicaciones con recursos. Pero ahora estoy haciendo una aplicación que necesito que el tamaño y colocación de los controles dentro de un dialogo aparezcan a una determinada distancia dependiendo de la resolución de la pantalla.
Para resumir, el problema que estoy teniendo, por ejemplo, es el siguiente:
Code: Select all  Expand view

nresv := GetDeviceCaps( hDC, VERTRES )
nresh := GetDeviceCaps( hDC, HORZRES )
n_ini_v_fold := 100  // el valor es lo de menos, en realidad es un % de la resolución de la pantalla
n_ini_h_fold := 20
n_fin_h_fold := 300
n_fin_v_fold := 250
DEFINE DIALOG oDlgNotas FROM 0,0 TO nresv, nresh
....
@ n_ini_v_fold, n_ini_h_fold FOLDEREX oFolder PROMPT afolders DIALOGS aDialogs OF oDlgNotas PIXEL SIZE n_fin_h_fold, n_fin_v_fold FONT oFontn
....
ACTIVATE DIALOG oDlgNotas
...
 


Aqui me pone el Folder en una determinada posición, pero por motivos de que las pestañas del folder cambian al seleccionar un elemento de un combobox, tengo que destruirlo y volver a declararlo en otra función:
Code: Select all  Expand view
function ponfolder(ccombo)
.....
@ n_ini_v_fold, n_ini_h_fold FOLDEREX oFolder PROMPT afolders DIALOGS aDialogs OF oDlgNotas PIXEL SIZE n_fin_h_fold, n_fin_v_fold FONT oFontn
....
return
 

Y aquí está el problema, en ningún momento se cambian los valores de las variables n_ini_v_fold.... Sin embargo, me muestra el folder en otra posición totalmente distinta, es como si los valores de las variables se hubieran reducido a menos de la mitad, cuando no es así (Comprobado mostrando msgalert(str(n_ini_v_fold) justo delante de la declaración del folder.
Eso mismo me pasa con todos los controles (xbrowse, btnbmp, comobobox. etc.), si están en la función donde se declara el dialogo, los muestra en la posicicón correcta, si se declaran en otra funcion, los muestra en otra posición. Incluso el tamaño de los botones y las distancias de un control a otro, varian. Me estoy volviendo loco.
¿Alguna sugerencia?
Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Clausula Pixel

Postby cnavarro » Fri Jul 09, 2021 4:55 pm

Sebastian, añade estas clausulas y prueba
Code: Select all  Expand view

DEFINE DIALOG oDlgNotas FROM 0,0 TO nresv, nresh PIXEL TRUEPIXEL
 
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Clausula Pixel

Postby Sebastián Almirón » Fri Jul 09, 2021 5:06 pm

Jo..r Cristobal, gracias, funciona a la perfección, no tenia ni idea de la clausula TRUEPIXEL para los dialogos, llevo cuatro días peleandome con esto.
Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Clausula Pixel

Postby karinha » Sat Jul 10, 2021 4:33 pm

Buén dia. Master Navarro, no uso Código, podrias porfa, explicar que hace:

Code: Select all  Expand view

   PIXEL TRUEPIXEL
 


Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Clausula Pixel

Postby cnavarro » Sat Jul 10, 2021 5:51 pm

Estimado Joao
Fijate en el siguiente ejemplo:
Code: Select all  Expand view

#include "Fivewin.ch"

Function Main()

   Pixels()
   TruePixels()

Return nil


Function Pixels()

   local oDlg
   local oGet
   local cVar  := Space( 30 )
   local oFont

   DEFINE FONT oFont NAME "Calibri" SIZE 0, -16  

   DEFINE DIALOG oDlg FROM 1, 1 TO 501, 701 PIXEL
   oDlg:lHelpIcon := .F.

      @ 10, 10 GET oGet VAR cVar SIZE 200, 24 OF oDlg FONT oFont PIXEL

   ACTIVATE DIALOG oDlg
   RELEASE FONT oFont

Return nil

Function TruePixels()

   local oDlg
   local oGet
   local cVar  := Space( 30 )
   local oFont

   DEFINE FONT oFont NAME "Calibri" SIZE 0, -16  

   DEFINE DIALOG oDlg FROM 1, 1 TO 501, 701 PIXEL TRUEPIXEL
   oDlg:lHelpIcon := .F.

      @ 10, 10 GET oGet VAR cVar SIZE 200, 24 OF oDlg FONT oFont PIXEL

   ACTIVATE DIALOG oDlg
   RELEASE FONT oFont

Return nil
 


Las diferencias entre programar usando un dialog o una ventana como contenedor es que las unidades por defecto que toman los dialogs respecto a las windows son el doble, aunque definas la clausula PIXEL en la definición del Dialog ( esta característica no es un tema de Fivewin, sino del propio Windows que lo tiene así establecido ).
Ante esa circunstancia y para que no haya diferencias de apariencia entre utilizar windows o dialog como contenedores de nuestros controles, se implementó la claúsula TRUEPIXEL en los dialog, para que Fw internamente divida por dos las coordenadas y tamaños que definimos en los controles, y aparezcan con las mismas dimensiones que si usáramos una window.
En resumen, la claúsula TRUEPIXEL se define en los dialog para ser aplicada a las coordenadas y dimensiones de nuestros controles.
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Clausula Pixel

Postby karinha » Mon Jul 12, 2021 12:45 pm

Perfecto Master. Con TRUEPIXEL, és bién mejor para trabajar. Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 78 guests