Jump to content
Fivewin Brasil

AutResiz()


kapiaba

Recommended Posts


// http://forums.fivetechsupport.com/viewtopic.php?f=17&t=5103&p=22589&hilit=definir+fuente#p22589
	/*
AutResiz()
	Notapor FiveWiDi » Mar Nov 28, 2006 9:19 am
	Código fuente de la función que utilizo para dimensionar mis ventanas/diálogos/controles.
	Seguramente se puede perfeccionar mucho pero a mi me vale.
*/
	/* ******************** */
#Include "FiveWin.ch"
	/*
Los parámetros recibidos son:
	lAutoresize: permite prescindir de la funcionalidad de esta función; permitiendo
de esta manera que la aplicación pueda tener un flag que
permita/deniegue el autoredimensionado de las pantallas. 03/03/2006.
nWhatSize: permite forzar el redimensionamiento a unos valores concretos;
permitiendo de esta manera que la aplicación pueda tener un valor
al cual redimensionar las pantallas. 03/03/2006.
oWnd: Objeto/ventana/diálogo/control a ser redimensionado.
nResolution: Número que identifica que resolución tenía la pantalla en la cual
se diseñó el objeto.
Este valor puede ser negativo, hecho que se interpretará como que
la ventana ya ha estado redimensionada previamente y se pretende
redimensionarla a su valor original. Esta característica es útil
para provocar que un control (o ventana/dialogo) concreto se le
devuelva su tamaño original según su valor de diseño. 03/03/2006
lRepaint: Indicador de si debe repintarse el objeto una vez redimensionado.
	Esta función permitirá que una aplicación desarrolada en un PC con una resolución
de pantalla de por ejemplo 1024 x 768 (nResolution valdría en este caso 3), se vea
redimensionada proporcionalmente en un PC con una resolución diferente, ya sea mayor
o menor.
	A falta de perfeccionar el código, se comprueba solamente la variación de la anchura
de la resolución de la pantalla para aplicar la variación del tamaño, aunque cuando
ello se realiza se hace tanto en la anchura como en la altura.
Ahora se comprueba la altura. 09/12/2005.
	Esta función está orientada a ser utilizada en el evento ON INIT del ACTIVATE
de las WINDOW y DIALOG con un valor fijo de lRepaint a .T. o sin él.
Además también puede utilizarse directamente sobre un control definido posteriormente
a la ACTIVACIÓN de su contenedor ya sea éste WINDOW o DIALOG, con la salvedad que
lRepaint debe valer .T. para forzar su repintado.
	Ejemplos de uso:
	-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona toda la ventana oWnd y sus controles.
*/
	ACTIVATE oWnd ON INIT AutResiz( .T., 0, oWnd, 3 )
	-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona todo el dialogo oDlg y sus controles. Además se fuerza que el control
oMyMulGet se redimensione como si la resolución de pantalla fuera del tipo 2.
	ACTIVATE oDlg ON INIT AutResiz( .T., 0, oWnd, 3 )
	AutResiz( .T., 2, oMyMulGet, 0)
	
-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
Se redimensiona el control oTabs.
@ 185.50,8.00 TABS oTabs OF oWnd ITEMS "Tab1","Tab2","Venga a ordenarrrrr!!" ;
PIXEL COLORS CLR_BLUE,CLR_HCYAN SIZE 288.00,9.00 MESSAGE "Mensaje del Tabs"
	AutResiz( .T., 0, oTabs, 3, .T. )
	-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
*/
	FUNCTION AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint )
	   // Resolución de la pantalla en el momento de definir los controles.
   Local nOriWidth, nOriHeight
	   // Lo normal sería que fuera la resolución actual de la pantalla (nWhatSize=0).
   // Se permite forzar esta resolución mediante el valor de nWhatSize=1,2,3,4,5,6,7,....
	   Local nWidth, nHeight
	   // Son la relación entre la resolución de pantalla y la resolución de diseño.
   Local nFactorWitdh, nFactorHeight
	   Local nContador
	   DEFAULT lRepaint := .T.
	   nOriWidth := 0
   nOriHeight := 0
   nWidth := 0
   nHeight := 0
   nContador := 0
	   If ABS(nResolution) = 1
      nOriWidth := 640
      nOriHeight := 480
   ElseIf ABS(nResolution) = 2
      nOriWidth := 800
      nOriHeight := 600
   ElseIf ABS(nResolution) = 3
      nOriWidth := 1024
      nOriHeight := 768
   ElseIf ABS(nResolution) = 4
      nOriWidth := 1152
   nOriHeight := 864
      ElseIf ABS(nResolution) = 5
      nOriWidth := 1280
      nOriHeight := 800
   ElseIf ABS(nResolution) = 6
      nOriWidth := 1280
      nOriHeight := 1024
   ElseIf ABS(nResolution) = 7
      nOriWidth := 1600
      nOriHeight := 1200
   ElseIf ABS(nResolution) = 8
      nOriWidth := 768
      nOriHeight := 1024
   Else
      ScrResolution( @nOriWidth, @nOriHeight )
   Endif
	   If nWhatSize = 1
      nWidth := 640
      nHeight := 480
   ElseIf nWhatSize = 2
      nWidth := 800
      nHeight := 600
   ElseIf nWhatSize = 3
      nWidth := 1024
      nHeight := 768
   ElseIf nWhatSize = 4
      nWidth := 1152
      nHeight := 864
   ElseIf nWhatSize = 5
      nWidth := 1280
      nHeight := 800
   ElseIf nWhatSize = 6
      nWidth := 1280
      nHeight := 1024
   ElseIf nWhatSize = 7
      nWidth := 1600
      nHeight := 1200
   ElseIf nWhatSize = 8
      nWidth := 768
      nHeight := 1024
   Else
	      ScrResolution( @nWidth, @nHeight )
	   Endif
	
   If lAutoresize .and. nOriHeight != nHeight
	      /* Este será el caso habitual, en el cual se pretende redimensionar
      los controles a la resolución de la pantalla en la cual se estan
      viendo. 01/03/2006 */
	   If nResolution > 0
	      nFactorWitdh := nWidth / nOriWidth
      nFactorHeight := nHeight / nOriHeight
	      /* Este será el caso en el cual se pretende deshacer el redimensionamiento
      de los controles realizado previamente. */
	   ElseIf nResolution < 0
	      nFactorWitdh := nOriWidth / nWidth
      nFactorHeight := nOriHeight / nHeight
	   EndIf
	   If lRepaint
      oWnd:Hide()
   EndIf
	   //If nFactorWitdh > 1 // .or.
   If nFactorHeight > 1
	
      If oWnd:ClassName() == "kalimeroquetequiero"
	      ElseIf oWnd:ClassName() $ "/TJ02LISMN/TLISTBOX/"
         oWnd:Move( oWnd:nTop * nFactorHeight , ;
         oWnd:nLeft * nFactorWitdh, ;
         oWnd:nWidth * nFactorWitdh, ;
         oWnd:nHeight , ;
         .F. )
      Else
	         oWnd:Move( oWnd:nTop * nFactorHeight , ;
         oWnd:nLeft * nFactorWitdh, ;
         oWnd:nWidth * nFactorWitdh, ;
         oWnd:nHeight * nFactorHeight , ;
         .F. )
      EndIf
	   EndIf
	   If oWnd:ClassName() == "TFOLDER"
      If ValType( oWnd:aDialogs ) = "A"
         For nContador := 1 To Len( oWnd:aDialogs )
            AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F. )
         EndFor
      EndIf
   Else
      If ValType( oWnd:aControls ) = "A"
         For nContador := 1 To Len( oWnd:aControls )
            AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F. )
         EndFor
      EndIf
   EndIf
	   //If nFactorWitdh < 1 // .or.
   If nFactorHeight < 1
	      If oWnd:ClassName() == "kalimeroquetequiero"
	         ElseIf oWnd:ClassName() $ "/TJ02LISMN/TLISTBOX/"
            oWnd:Move( oWnd:nTop * nFactorHeight , ;
            oWnd:nLeft * nFactorWitdh, ;
            oWnd:nWidth * nFactorWitdh, ;
            oWnd:nHeight , ;
            .F. )
	         Else
	            oWnd:Move( oWnd:nTop * nFactorHeight , ;
            oWnd:nLeft * nFactorWitdh, ;
            oWnd:nWidth * nFactorWitdh, ;
            oWnd:nHeight * nFactorHeight , ;
            .F. )
         EndIf
	      EndIf
	      If lRepaint
         oWnd:Show()
      EndIf
	   EndIf
	Return Nil
/* ******************** */
	/*
Saludos
Carlos G.
*/


 

Link to comment
Share on other sites

  • 2 months later...

Kapiaba,

Toda vez que ativo a Dialog com essa função, os botões da barra da Window ficam maiores e são redimensionados na barra...

Não estudei a função, mas obrigado de qualquer forma.

Vou continuar no encalço da danada...

Agora, vou tomar umas que chegou a hora!

Bom Carnaval a todos!

Rodrigo Melo

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...