Jump to content
Fivewin Brasil

COMBOMBOX com DISPLAY.PRG


kapiaba

Recommended Posts

http://fivetechsupport.com/forums/viewtopic.php?f=6&t=29291

Galera, ajuda ahi: Porque este exemplo não funciona com a DISPLAY.PRG o COMBOBOX não abre...
#include "fivewin.ch"
#include "dbcombo.ch"
 
STATIC oDlg
 
function Main()
 
   DEFINE DIALOG oDlg SIZE 600, 450 pixel ;
      STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
 
   ACTIVATE DIALOG oDlg on init ( MakeComboBox( oDlg ) ,display( oDlg, 2, .t. ) ) CENTERED
 
return nil
 
STATIC function MakeComboBox( oDlg )
 
   local oGet, oCbx
   local nTotal := 0
   local cItem := "UNO"
 
   @ 10, 10 SAY "IMPORTE" OF oDlg pixel color CLR_HBLUE TRANSPARENT
 
   @ 30, 10 GET oGet VAR nTotal of oDlg ;
            SIZE 60, 15  PICTURE "999,999.99" PIXEL UPDATE
 
   @ 10, 80 SAY "Selecciona un ITEM " OF oDlg ;
            PIXEL color CLR_HBLUE TRANSPARENT
 
   @ 30, 80 COMBOBOX oCbx VAR cItem ;
    OF oDlg STYLE CBS_DROPDOWNLIST ;
            PIXEL SIZE 100, 300  UPDATE ;
            ON CHANGE MsgBeep() ;
     ITEMS {"UNO","DOS","TRES","CUATRO","CINCO"}
 
RETURN NIL
 
#include "display.prg"
Abs,
Link to comment
Share on other sites

Eu pergunto e eu mesmo respondo(kkkkkkkkkkkk) a Resolução estava errada, no meu caso tem que ser a * 3 = 1024 X 768

 *  1 =  640 X 480
 *  2 =  800 X 600
 *  3 = 1024 X 768
 *  4 = 1152 X 864
 *  5 = 1280 X 800
 *  6 = 1280 X 1024
 *  7 = 1600 X 1200
 *  8 =  768 X 1024
 *  9 = 1440 X 900
 * 10 = 1280 X 768
 * 11 = 1280 X 720
 

Abs

Link to comment
Share on other sites

Galera, me ajuda ahi a achar a Resolução para cada tipo de Resolução de Tela dos Windows?

Retornando nResolution correto...




#Include "fivewin.ch"
#Include "dbcombo.ch"

STATIC oDlg, oWnd

FUNCTION Main()

LOCAL nResolution

// Janela Invisivel - coordenadas
DEFINE WINDOW oWnd TITLE "Display" FROM -1, -1 TO -1, -1

nResHoriz := oWnd:nHorzRes() // retorna a resolucao horizontal
nResVert := oWnd:nVertRes() // retorna a resolucao vertical

nResolution := Resolution( oWnd )

DEFINE DIALOG oDlg SIZE 600, 450 PIXEL ;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

oDlg:lHelpIcon := .F.

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT( MakeComboBox( oDlg ), ;
DISPLAY( oDlg, nResolution, .T. ) )

oWnd:End()

ACTIVATE WINDOW oWnd

RETURN NIL

FUNCTION MakeComboBox( oDlg )

LOCAL oGet, oCbx
LOCAL nTotal := 0
LOCAL cItem := "UNO"

@ 10, 10 SAY "IMPORTE" OF oDlg pixel color CLR_HBLUE TRANSPARENT

@ 30, 10 GET oGet VAR nTotal of oDlg ;
SIZE 60, 15 PICTURE "999,999.99" PIXEL UPDATE

@ 10, 80 SAY "Selecciona un ITEM " OF oDlg ;
PIXEL color CLR_HBLUE TRANSPARENT

@ 30, 80 COMBOBOX oCbx VAR cItem ;
OF oDlg STYLE CBS_DROPDOWNLIST ;
PIXEL SIZE 100, 300 UPDATE ;
ON CHANGE MsgBeep() ;
ITEMS {"UNO","DOS","TRES","CUATRO","CINCO"}

RETURN NIL

//#include "display.prg"

FUNCTION Resolution( oWnd )

IF nResHoriz = 2560 .AND. nResVert = 1600

? [nResolution? ]

ELSEIF nResHoriz = 1920 .AND. nResVert = 1080

? [nResolution? ]

ELSEIF nResHoriz = 1680 .AND. nResVert = 1050

? [nResolution? ]

ELSEIF nResHoriz = 1600 .AND. nResVert = 1200

* 7 = 1600 X 1200

nResolution := 7

ELSEIF nResHoriz = 1440 .AND. nResVert = 900

* 9 = 1440 X 900

nResolution := 9

ELSEIF nResHoriz = 1366 .AND. nResVert = 768

? [nResolution? ]

ELSEIF nResHoriz = 1360 .AND. nResVert = 768

? [nResolution? ]

ELSEIF nResHoriz = 1280 .AND. nResVert = 1080

? [nResolution? ]

ELSEIF nResHoriz = 1280 .AND. nResVert = 1024

* 6 = 1280 X 1024

nResolution := 6

ELSEIF nResHoriz = 1280 .AND. nResVert = 960

? [nResolution? ]

ELSEIF nResHoriz = 1280 .AND. nResVert = 800

* 5 = 1280 X 800

nResolution := 5

ELSEIF nResHoriz = 1280 .AND. nResVert = 768

* 10 = 1280 X 768

nResolution := 10

ELSEIF nResHoriz = 1280 .AND. nResVert = 720

* 11 = 1280 X 720

nResolution := 11

ELSEIF nResHoriz = 1280 .AND. nResVert = 600

? [nResolution? ]

ELSEIF nResHoriz = 1152 .AND. nResVert = 864

* 4 = 1152 X 864

nResolution := 4

ELSEIF nResHoriz = 1024 .AND. nResVert = 768

* 3 = 1024 X 768

nResolution := 3

ELSEIF nResHoriz = 800 .AND. nResVert = 600

* 2 = 800 X 600

//? [800 X 600] // funciona

nResolution := 2

ELSEIF nResHoriz = 768 .AND. nResVert = 1024

* 8 = 768 X 1024

nResolution := 8

ELSEIF nResHoriz = 720 .AND. nResVert = 480

? [nResolution? ]

ELSEIF nResHoriz = 720 .AND. nResVert = 480

* 1 = 640 X 480

nResolution := 1

ENDIF

RETURN( nResolution )

// END OF PROGRAM



Obg. abs.

Link to comment
Share on other sites

fala Brother

Esses parâmetros eram as resoluções que tinham disponíveis na época que desenvolvi a função. Mas vc pode acrescentar qualquer resolução que queira na lista.

O que importa é a resolução inicial que vc desenhou os controles no workshop. Essa resolução vc pode pegar nas propriedades de vídeo - resolução de tela do computador. Qualquer resolução pode ser acrescentada na função Display.

A Display pega a resolução do computador em uso e aumenta ou diminui o tamanho das dialogs com base na resolução que foi desenhado originalmente.

William

Link to comment
Share on other sites

Resolvido. Obrigado Willian, demorei, mas entendi a bagaça... kkkkkkkkkk, eu tardo mas não falho.



#Include "fivewin.ch"
#Include "dbcombo.ch"

STATIC oDlg, oWnd

FUNCTION Main()

LOCAL nResolution

// Janela Invisivel - coordenadas
DEFINE WINDOW oWnd TITLE "Display" FROM -1, -1 TO -1, -1

nResHoriz := oWnd:nHorzRes() // retorna a resolucao horizontal
nResVert := oWnd:nVertRes() // retorna a resolucao vertical

nResolution := Resolution( oWnd )

DEFINE DIALOG oDlg SIZE 600, 450 PIXEL ;
STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

oDlg:lHelpIcon := .F.

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT( MakeComboBox( oDlg ), ;
DISPLAY( oDlg, nResolution, .T. ) )

oWnd:End()

ACTIVATE WINDOW oWnd

RETURN NIL

FUNCTION MakeComboBox( oDlg )

LOCAL oGet, oCbx
LOCAL nTotal := 0
LOCAL cItem := "UNO"

@ 10, 10 SAY "IMPORTE" OF oDlg pixel color CLR_HBLUE TRANSPARENT

@ 30, 10 GET oGet VAR nTotal of oDlg ;
SIZE 60, 15 PICTURE "999,999.99" PIXEL UPDATE

@ 10, 80 SAY "Selecciona un ITEM " OF oDlg ;
PIXEL color CLR_HBLUE TRANSPARENT

@ 30, 80 COMBOBOX oCbx VAR cItem ;
OF oDlg STYLE CBS_DROPDOWNLIST ;
PIXEL SIZE 100, 300 UPDATE ;
ON CHANGE MsgBeep() ;
ITEMS {"UNO","DOS","TRES","CUATRO","CINCO"}

RETURN NIL

//#include "display.prg"

FUNCTION Resolution( oWnd )

IF nResHoriz = 2560 .AND. nResVert = 1600

// 12 2560x1600 8:5 WQXGA 0.05%
nResolution := 13

ELSEIF nResHoriz = 2560 .AND. nResVert = 1440

// 13 2560 x 1440 0.92%
nResolution := 12

ELSEIF nResHoriz = 1920 .AND. nResVert = 1080

//14 1920x1080 16:9 HD 1080 10.97%
nResolution := 14

ELSEIF nResHoriz = 1680 .AND. nResVert = 1050

//15 1680x1050 8:5 WSXGA+ 3.29%
nResolution := 15

ELSEIF nResHoriz = 1600 .AND. nResVert = 1200

* 7 = 1600 X 1200
nResolution := 7

ELSEIF nResHoriz = 1440 .AND. nResVert = 900

* 9 = 1440 X 900
nResolution := 9

ELSEIF nResHoriz = 1366 .AND. nResVert = 768

// 16 1366x768 HD 22.98%
nResolution := 16

ELSEIF nResHoriz = 1360 .AND. nResVert = 768

//17 1360x768 2.33%
nResolution := 17

ELSEIF nResHoriz = 1280 .AND. nResVert = 1080

// 18 1280x1080 0.001%
nResolution := 18

ELSEIF nResHoriz = 1280 .AND. nResVert = 1024

* 6 = 1280 X 1024
nResolution := 6

ELSEIF nResHoriz = 1280 .AND. nResVert = 960

// 19 1280x960 0.46%
nResolution := 19

ELSEIF nResHoriz = 1280 .AND. nResVert = 800

* 5 = 1280 X 800
nResolution := 5

ELSEIF nResHoriz = 1280 .AND. nResVert = 768

* 10 = 1280 X 768
nResolution := 10

ELSEIF nResHoriz = 1280 .AND. nResVert = 720

* 11 = 1280 X 720
nResolution := 11

ELSEIF nResHoriz = 1280 .AND. nResVert = 600

// 20 1280x600 0.01%
nResolution := 20

ELSEIF nResHoriz = 1152 .AND. nResVert = 864

* 4 = 1152 X 864
nResolution := 4

ELSEIF nResHoriz = 1024 .AND. nResVert = 768

* 3 = 1024 X 768
nResolution := 3

ELSEIF nResHoriz = 800 .AND. nResVert = 600

* 2 = 800 X 600
nResolution := 2

ELSEIF nResHoriz = 768 .AND. nResVert = 1024

* 8 = 768 X 1024
nResolution := 8

ELSEIF nResHoriz = 720 .AND. nResVert = 480

// 21 720x480 3:2 NTSC 0.001%
nResolution := 21

ELSEIF nResHoriz = 640 .AND. nResVert = 480

* 1 = 640 X 480
nResolution := 1

ENDIF

RETURN( nResolution )

// END OF PROGRAM
Link to comment
Share on other sites

DISPLAY.PRG



#include "FiveWin.ch"
#include "common.ch"
#include "xbrowse.ch"

*********************************************************************
* NOME......: DISPLAY(oWnd,nResolution)
*
* VERSAO....: 3.0 - Julho de 2010
*
* AUTOR.....: William de Brito Adami e FiveWidi, que iniciou este projeto
* no Forum Espanhol de Fivewin .
*
* DESCRICAO.: Funcao para exibir a tela sempre igual em qualquer
* resolucao, independente da fonte ou controle utilizado.
*
* PARAMETROS: oWnd: Window ou Dialog a ser redimensionado
* nResolution: Numero correspondente a resolucao
* que se desenhou inicialmente a tela.
*
*********************************************************************
function display( oWnd, nResolution, lFullres )
local lAutoresize:=.t. , nWhatSize:=0, lRepaint:=.t.

* atencao: nResolution identifica em que resolucao foram inicialmente
* desenhadas as telas, e DEVE ter um dos seguintes valores:
*
* 1 = 640 X 480
* 2 = 800 X 600
* 3 = 1024 X 768
* 4 = 1152 X 864
* 5 = 1280 X 800
* 6 = 1280 X 1024
* 7 = 1600 X 1200
* 8 = 768 X 1024
* 9 = 1440 X 900
* 10 = 1280 X 768
* 11 = 1280 X 720

AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint, lFullres )

return nil



/*
(20/08/2009) Inicio do REdesenvolvimento da funcao.
Parametros recebidos :

lAutoresize: ativa / desativa redimensionamento automatico

nWhatSize: permite for‡ar o redimensionamento a valores concretos;
permitindo desta maneira que a aplica‡ao possa ter um valor
ao qual redimensionar as telas.

oWnd: Objeto/janela/dialogo/controle a ser redimensionado.

nResolution: Numero que identifica que resolucao tinha a tela na qual
se desenhou o objeto.

lRepaint: Indicador se deve repintar o objeto uma vez redimensionado.

lFullres: Indica se os textos devem ser redimensionados no tamanho maximo
do resource desenhado.


Esta funcao deve ser utilizada no evento ON INIT do ACTIVATE das WINDOWs
e DIALOGs .

Exemplo:

ACTIVATE DIALOG oDlg ON INIT display(oDlg,2,.t.) //desenhada em 800 X 600


-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
*/



FUNCTION AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint,lFullres )

// Resolucao da tela no momento de definir os controles.
Local nOriWidth, nOriHeight

// o normal seria que fosse a resolucao atual da tela (nWhatSize=0).
// Se permite forcar esta resolucao mediante o valor de nWhatSize=1,2,3,4,5,6,7,....
Local nWidth, nHeight

// Sao as relacoes entre a resolucao de tela e a resolucao de desenho.
Local nFactorWitdh, nFactorHeight

Local nContador,ofonttmp

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
ElseIf ABS(nResolution) = 9
nOriWidth := 1440
nOriHeight := 900
ElseIf ABS(nResolution) = 10
nOriWidth := 1280
nOriHeight := 768
ElseIf ABS(nResolution) = 11
nOriWidth := 1280
nOriHeight := 720
ElseIf ABS(nResolution) = 12
nOriWidth := 2560
nOriHeight := 1440
// 17 2560 x 1440 0.92%
ElseIf ABS(nResolution) = 13
nOriWidth := 2560
nOriHeight := 1600
// 59 2560x1600 8:5 WQXGA 0.05%
ElseIf ABS(nResolution) = 14
nOriWidth := 1920
nOriHeight := 1080
//14 1920x1080 16:9 HD 1080 10.97%
ElseIf ABS(nResolution) = 15
nOriWidth := 1680
nOriHeight := 1050
//15 1680x1050 8:5 WSXGA+ 3.29%
ElseIf ABS(nResolution) = 16
nOriWidth := 1366
nOriHeight := 768
// 16 1366x768 HD 22.98%
ElseIf ABS(nResolution) = 17
nOriWidth := 1360
nOriHeight := 768
//17 1360x768 2.33%
ElseIf ABS(nResolution) = 18
nOriWidth := 1280
nOriHeight := 1080
// 18 1280x1080 0.001%
ElseIf ABS(nResolution) = 19
nOriWidth := 1280
nOriHeight := 960
// 19 1280x960 0.46%
ElseIf ABS(nResolution) = 20
nOriWidth := 1280
nOriHeight := 600
// 20 1280x600 0.01%
ElseIf ABS(nResolution) = 21
nOriWidth := 720
nOriHeight := 480
// 21 720x480 3:2 NTSC 0.001%

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
ElseIf nWhatSize = 9
nWidth := 1440
nHeight := 900
ElseIf nWhatSize = 10
nWidth := 1280
nHeight := 768
ElseIf nWhatSize = 11
nWidth := 1280
nHeight := 720
ElseIf nWhatSize = 12
nWidth := 2560
nHeight := 1440
// 17 2560 x 1440 0.92%
ElseIf nWhatSize = 13
nWidth := 2560
nHeight := 1600
// 59 2560x1600 8:5 WQXGA 0.05%
ElseIf nWhatSize = 14
nWidth := 1920
nHeight := 1080
//14 1920x1080 16:9 HD 1080 10.97%
ElseIf nWhatSize = 15
nWidth := 1680
nHeight := 1050
//15 1680x1050 8:5 WSXGA+ 3.29%
ElseIf nWhatSize = 16
nWidth := 1366
nHeight := 768
// 16 1366x768 HD 22.98%
ElseIf nWhatSize = 17
nWidth := 1360
nHeight := 768
//17 1360x768 2.33%
ElseIf nWhatSize = 18
nWidth := 1280
nHeight := 1080
// 18 1280x1080 0.001%
ElseIf nWhatSize = 19
nWidth := 1280
nHeight := 960
// 19 1280x960 0.46%
ElseIf nWhatSize = 20
nWidth := 1280
nHeight := 600
// 20 1280x600 0.01%
ElseIf nWhatSize = 21
nWidth := 720
nHeight := 480
// 21 720x480 3:2 NTSC 0.001%

Else

ScrResolution( @nWidth, @nHeight )

Endif


If lAutoresize .and. nOriHeight != nHeight

/* Este sera o caso habitual, ao qual se pretende redimensionar
os controles na resolucao da tela na qual estao viendo. */

If nResolution > 0

nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight

ElseIf nResolution < 0

nFactorWitdh := nOriWidth / nWidth
nFactorHeight := nOriHeight / nHeight

EndIf

If lRepaint
oWnd:Hide()
EndIf


* se aumentou a altura
If nFactorHeight > 1

*****************************
* se tiver barbutton * NOVO *
*****************************
if ownd:obar <> NIL
ownd:obar:nwidth:=ownd:obar:nwidth* nfactorwitdh
ownd:obar:nHeight:=ownd:obar:nHeight*nfactorheight
ownd:obar:nbtnwidth:=ownd:obar:nbtnwidth*nfactorwitdh
ownd:obar:nbtnHeight:=ownd:obar:nbtnHeight*nfactorheight
for i= 1 to len(ownd:obar:acontrols)
ownd:obar:acontrols[i]:Move( ownd:obar:acontrols[i]:nTop * nFactorHeight , ;
ownd:obar:acontrols[i]:nLeft * nFactorWitdh, ;
ownd:obar:acontrols[i]:nWidth * nFactorWitdh, ;
ownd:obar:acontrols[i]:nHeight * nFactorHeight , ;
.F. )
* redimensiona o BMP da BARBUTTON
o:=ownd:obar:acontrols[i]:hbitmap1
if o<>0
hbmp:=ownd:obar:acontrols[i]:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
ownd:obar:acontrols[i]:hbitmap1:=o
endif
next
ownd:obar:refresh()
endif


If oWnd:ClassName()$"/TIMAGE/"

ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

Else

oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

EndIf
EndIf



if oWnd:ClassName()$"/TFOLDER/TPAGES/"

If ValType( oWnd:aDialogs ) = "A"
For nContador := 1 To Len( oWnd:aDialogs )
AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F.,lFullres )
EndFor
EndIf


Elseif oWnd:ClassName()$"/TBTNBMP/"

*********************************
* redimensiona o BMP do BTNBMP
o:=oWnd:hbitmap1
if o<>0
hbmp:=ownd:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
oWnd:hbitmap1:=o
endif
*********************************



elseif oWnd:ClassName()$"/TCOMBOBOX/TDBCOMBO/"


Else
If ValType( oWnd:aControls ) = "A"
For nContador := 1 To Len( oWnd:aControls )

AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F.,lFullres )

* ajuste de fontess
* controle TSAY
if ownd:acontrols[nContador]:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajustalarg(ownd:acontrols[nContador],ownd,nfactorwitdh,lFullres)

ELSEif ownd:acontrols[nContador]:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)

ELSEif ownd:acontrols[nContador]:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd:acontrols[nContador],nFactorHeight)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)
endif

EndFor
EndIf
EndIf

* se diminuiu a altura
If nFactorHeight < 1

*****************************
* se tiver barbutton * NOVO *
*****************************
if ownd:obar <> NIL
ownd:obar:nwidth:=ownd:obar:nwidth* nfactorwitdh
ownd:obar:nHeight:=ownd:obar:nHeight*nfactorheight
ownd:obar:nbtnwidth:=ownd:obar:nbtnwidth*nfactorwitdh
ownd:obar:nbtnHeight:=ownd:obar:nbtnHeight*nfactorheight
for i= 1 to len(ownd:obar:acontrols)
ownd:obar:acontrols[i]:Move( ownd:obar:acontrols[i]:nTop * nFactorHeight , ;
ownd:obar:acontrols[i]:nLeft * nFactorWitdh, ;
ownd:obar:acontrols[i]:nWidth * nFactorWitdh, ;
ownd:obar:acontrols[i]:nHeight * nFactorHeight , ;
.F. )

* redimensiona o BMP da BARBUTTON
o:=ownd:obar:acontrols[i]:hbitmap1
if o<>0
hbmp:=ownd:obar:acontrols[i]:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
ownd:obar:acontrols[i]:hbitmap1:=o
endif
next
ownd:obar:refresh()
endif
***************************************

if oWnd:ClassName()$"/TIMAGE/"

ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

Elseif oWnd:ClassName()$"/TBTNBMP/"

oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

*********************************
* redimensiona o BMP do BTNBMP
o:=oWnd:hbitmap1
if o<>0
hbmp:=ownd:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
oWnd:hbitmap1:=o
endif
*********************************


Else


oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

endif


If ValType( oWnd:aControls ) <> "A"

* ajuste de fontess
* controle TSAY
if ownd:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd,nfactorheight,lFullres)
ajustalarg(ownd,ownd,nfactorwitdh,lFullres)
ELSEif ownd:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd,nfactorheight,lFullres)
ajl_FLD(ownd,nFactorWitdh)

ELSEif ownd:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd,nFactorHeight)
ajl_FLD(ownd,nFactorWitdh)

endif


EndIf

EndIf

If lRepaint

if oWnd:lCentered // *** AAA ***//
oWnd:Center() // *** AAA ***//
endif // *** AAA ***//

oWnd:Show()

EndIf

***************************************
* se for resolucao igual a que desenhou
***************************************
elseif lAutoresize .and. nOriHeight = nHeight


if lfullres

If nResolution > 0
nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight
ElseIf nResolution < 0
nFactorWitdh := nOriWidth / nWidth
nFactorHeight := nOriHeight / nHeight
EndIf

If oWnd:ClassName()$"/TFOLDER/TPAGES/"
If ValType( oWnd:aDialogs ) = "A"
For nContador := 1 To Len( oWnd:aDialogs )
AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F.,lfullres )
EndFor
EndIf
elseif oWnd:ClassName()$"/TIMAGE/" //TBITMAP/TLISTBOX/TWBROWSE/TSSAY/TDSAY/TSAYREF/"
ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

elseif oWnd:ClassName()$"/TCOMBOBOX/TDBCOMBO/"


Else
If ValType( oWnd:aControls ) = "A"
For nContador := 1 To Len( oWnd:aControls )

AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F.,lfullres )

* ajuste de fontes
* controle TSAY
if ownd:acontrols[nContador]:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajustalarg(ownd:acontrols[nContador],ownd,nfactorwitdh,lFullres)
ELSEif ownd:acontrols[nContador]:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)
ELSEif ownd:acontrols[nContador]:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd:acontrols[nContador],nFactorHeight)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)

endif

EndFor
EndIf
EndIf

endif
EndIf

Return Nil




FUNCTION AjustaLarg(oq,ownd,nfact,lfullres)
* se nao tiver fonte atribuida, nao faz !
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F.,;
nAlturaDaFonte,;
nLarguraDaFonte := oq:ofont:nwidth,;
nLarguraDoControle ,;
nTime := SECONDS()+3,;
oFontTmp,ofont

if cFontName="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nAlturaDaFonte := oq:oFont:nHeight
nlarguradafonte:=nlarguradafonte*nfact
nLarguraDoControle := oq:nWidth

if lFullres


WHILE SECONDS() < nTime // Evita congelamento da aplicação caso não seja possível recalcular a fonte

nLarguraDaFonte += 1 // Nao funciona com numeros facionados

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE nLarguraDaFonte,ABS(nAlturaDaFonte)

lFlagReleaseFont := .T.

IF oWnd:GetWidth(oq:varget(),oFontTmp) >= nLarguraDoControle
EXIT
ENDIF

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp
lFlagReleaseFont := .F.

ENDDO

IF lFlagReleaseFont
RELEASE FONT oFontTmp
ENDIF

oq:SetFont(oFont)
else


DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


endif



* oq:Refresh()

RETURN NIL


FUNCTION AjustaAlt(oq,fact,lFullres)
* se nao tiver fonte , nao faz !
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte, nAlturaDoControle
LOCAL nLarguraDaFonte, nTime:= SECONDS()+3, oFontTmp,ofont

* se nao tiver fonte, volta sem ajustar
if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nAlturaDaFonte:=oq:ofont:nheight



if lFullres


* se tiver fonte , ajusta
nAlturaDoControle := (oq:nHeight)-6

nLarguraDaFonte := oq:oFont:nWidth

nAlturadaFonte:=nalturadafonte*fact

WHILE SECONDS() < nTime // Evita congelamento da aplicação caso não seja possível recalcular a fonte

nAlturaDaFonte += 0.1 // Na altura o fracionamento funcionou

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE nLarguraDaFonte,nAlturaDaFonte

lFlagReleaseFont := .T.

IF oFontTmp:nHeight >= nAlturaDoControle
EXIT
ENDIF

oq:SetFont(oFontTmp)
oFont := oq:ofont //oSay:GetFont()

RELEASE FONT oFontTmp
lFlagReleaseFont := .F.

ENDDO

IF lFlagReleaseFont
RELEASE FONT oFontTmp
ENDIF

oq:SetFont(oFont)
else

nLarguraDaFonte := oq:oFont:nWidth
nAlturadaFonte:=nalturadafonte*fact

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


endif

* oq:Refresh()


RETURN NIL



FUNCTION ajl_FLD(oq,nf)
* se nao tiver fonte , nao faz
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte, nLarguraDaFonte := 0,;
nLarguraDoControle ,nTime:= SECONDS()+3, oFontTmp,ofont

if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//


nLarguraDoControle := oq:nWidth
nAlturaDaFonte := oq:oFont:nHeight
nLarguraDaFonte = nLarguraDaFonte*nf

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


If oq:ClassName()$"/TXBROWSE/"

for i=1 to len(oq:acols)
* pega tamanho anterior X factor
ov:=oq:aCols[i]:nWidth * nf
* atualiza o novo tamanho da coluna
oq:aCols[i]:nWidth := ov
next

elseif oq:classname$"/TDSAY/"

oq:Refresh()

elseif oq:ClassName()$"/TWBROWSE/"

* atualiza a largura das colunas
for i=1 to len(oq:acolsizes)
oq:acolsizes[i]:=oq:acolsizes[i]*nf
next

endif

* oq:Refresh()

RETURN NIL



FUNCTION aja_FLD(oq,nf)
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte := 0,;
nLarguraDaFonte, oFontTmp,ofont

if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nLarguraDaFonte := oq:oFont:nWidth
nAlturadaFonte:=nalturadafonte*nf

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp

If oq:ClassName()$"/TXBROWSE/"
oq:nRowHeight := oq:nRowHeight* nf
oq:nStretchcol:=STRETCHCOL_LAST

elseif oq:ClassName()$"/TSBROWSE/"

oq:nHeightCell:=oq:nHeightCell * nf
* oq:nheightHead:=oq:nheightHead*nf
* oq:nheightFoot:=oq:nheightFoot*nf



endifDISPLAY.PRG

[code]
#include "FiveWin.ch"
#include "common.ch"
#include "xbrowse.ch"

*********************************************************************
* NOME......: DISPLAY(oWnd,nResolution)
*
* VERSAO....: 3.0 - Julho de 2010
*
* AUTOR.....: William de Brito Adami e FiveWidi, que iniciou este projeto
* no Forum Espanhol de Fivewin .
*
* DESCRICAO.: Funcao para exibir a tela sempre igual em qualquer
* resolucao, independente da fonte ou controle utilizado.
*
* PARAMETROS: oWnd: Window ou Dialog a ser redimensionado
* nResolution: Numero correspondente a resolucao
* que se desenhou inicialmente a tela.
*
*********************************************************************
function display( oWnd, nResolution, lFullres )
local lAutoresize:=.t. , nWhatSize:=0, lRepaint:=.t.

* atencao: nResolution identifica em que resolucao foram inicialmente
* desenhadas as telas, e DEVE ter um dos seguintes valores:
*
* 1 = 640 X 480
* 2 = 800 X 600
* 3 = 1024 X 768
* 4 = 1152 X 864
* 5 = 1280 X 800
* 6 = 1280 X 1024
* 7 = 1600 X 1200
* 8 = 768 X 1024
* 9 = 1440 X 900
* 10 = 1280 X 768
* 11 = 1280 X 720

AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint, lFullres )

return nil



/*
(20/08/2009) Inicio do REdesenvolvimento da funcao.
Parametros recebidos :

lAutoresize: ativa / desativa redimensionamento automatico

nWhatSize: permite for‡ar o redimensionamento a valores concretos;
permitindo desta maneira que a aplica‡ao possa ter um valor
ao qual redimensionar as telas.

oWnd: Objeto/janela/dialogo/controle a ser redimensionado.

nResolution: Numero que identifica que resolucao tinha a tela na qual
se desenhou o objeto.

lRepaint: Indicador se deve repintar o objeto uma vez redimensionado.

lFullres: Indica se os textos devem ser redimensionados no tamanho maximo
do resource desenhado.


Esta funcao deve ser utilizada no evento ON INIT do ACTIVATE das WINDOWs
e DIALOGs .

Exemplo:

ACTIVATE DIALOG oDlg ON INIT display(oDlg,2,.t.) //desenhada em 800 X 600


-* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -* -*
*/



FUNCTION AutResiz( lAutoresize, nWhatSize, oWnd, nResolution, lRepaint,lFullres )

// Resolucao da tela no momento de definir os controles.
Local nOriWidth, nOriHeight

// o normal seria que fosse a resolucao atual da tela (nWhatSize=0).
// Se permite forcar esta resolucao mediante o valor de nWhatSize=1,2,3,4,5,6,7,....
Local nWidth, nHeight

// Sao as relacoes entre a resolucao de tela e a resolucao de desenho.
Local nFactorWitdh, nFactorHeight

Local nContador,ofonttmp

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
ElseIf ABS(nResolution) = 9
nOriWidth := 1440
nOriHeight := 900
ElseIf ABS(nResolution) = 10
nOriWidth := 1280
nOriHeight := 768
ElseIf ABS(nResolution) = 11
nOriWidth := 1280
nOriHeight := 720
ElseIf ABS(nResolution) = 12
nOriWidth := 2560
nOriHeight := 1440
// 17 2560 x 1440 0.92%
ElseIf ABS(nResolution) = 13
nOriWidth := 2560
nOriHeight := 1600
// 59 2560x1600 8:5 WQXGA 0.05%
ElseIf ABS(nResolution) = 14
nOriWidth := 1920
nOriHeight := 1080
//14 1920x1080 16:9 HD 1080 10.97%
ElseIf ABS(nResolution) = 15
nOriWidth := 1680
nOriHeight := 1050
//15 1680x1050 8:5 WSXGA+ 3.29%
ElseIf ABS(nResolution) = 16
nOriWidth := 1366
nOriHeight := 768
// 16 1366x768 HD 22.98%
ElseIf ABS(nResolution) = 17
nOriWidth := 1360
nOriHeight := 768
//17 1360x768 2.33%
ElseIf ABS(nResolution) = 18
nOriWidth := 1280
nOriHeight := 1080
// 18 1280x1080 0.001%
ElseIf ABS(nResolution) = 19
nOriWidth := 1280
nOriHeight := 960
// 19 1280x960 0.46%
ElseIf ABS(nResolution) = 20
nOriWidth := 1280
nOriHeight := 600
// 20 1280x600 0.01%
ElseIf ABS(nResolution) = 21
nOriWidth := 720
nOriHeight := 480
// 21 720x480 3:2 NTSC 0.001%

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
ElseIf nWhatSize = 9
nWidth := 1440
nHeight := 900
ElseIf nWhatSize = 10
nWidth := 1280
nHeight := 768
ElseIf nWhatSize = 11
nWidth := 1280
nHeight := 720
ElseIf nWhatSize = 12
nWidth := 2560
nHeight := 1440
// 17 2560 x 1440 0.92%
ElseIf nWhatSize = 13
nWidth := 2560
nHeight := 1600
// 59 2560x1600 8:5 WQXGA 0.05%
ElseIf nWhatSize = 14
nWidth := 1920
nHeight := 1080
//14 1920x1080 16:9 HD 1080 10.97%
ElseIf nWhatSize = 15
nWidth := 1680
nHeight := 1050
//15 1680x1050 8:5 WSXGA+ 3.29%
ElseIf nWhatSize = 16
nWidth := 1366
nHeight := 768
// 16 1366x768 HD 22.98%
ElseIf nWhatSize = 17
nWidth := 1360
nHeight := 768
//17 1360x768 2.33%
ElseIf nWhatSize = 18
nWidth := 1280
nHeight := 1080
// 18 1280x1080 0.001%
ElseIf nWhatSize = 19
nWidth := 1280
nHeight := 960
// 19 1280x960 0.46%
ElseIf nWhatSize = 20
nWidth := 1280
nHeight := 600
// 20 1280x600 0.01%
ElseIf nWhatSize = 21
nWidth := 720
nHeight := 480
// 21 720x480 3:2 NTSC 0.001%

Else

ScrResolution( @nWidth, @nHeight )

Endif


If lAutoresize .and. nOriHeight != nHeight

/* Este sera o caso habitual, ao qual se pretende redimensionar
os controles na resolucao da tela na qual estao viendo. */

If nResolution > 0

nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight

ElseIf nResolution < 0

nFactorWitdh := nOriWidth / nWidth
nFactorHeight := nOriHeight / nHeight

EndIf

If lRepaint
oWnd:Hide()
EndIf


* se aumentou a altura
If nFactorHeight > 1

*****************************
* se tiver barbutton * NOVO *
*****************************
if ownd:obar <> NIL
ownd:obar:nwidth:=ownd:obar:nwidth* nfactorwitdh
ownd:obar:nHeight:=ownd:obar:nHeight*nfactorheight
ownd:obar:nbtnwidth:=ownd:obar:nbtnwidth*nfactorwitdh
ownd:obar:nbtnHeight:=ownd:obar:nbtnHeight*nfactorheight
for i= 1 to len(ownd:obar:acontrols)
ownd:obar:acontrols[i]:Move( ownd:obar:acontrols[i]:nTop * nFactorHeight , ;
ownd:obar:acontrols[i]:nLeft * nFactorWitdh, ;
ownd:obar:acontrols[i]:nWidth * nFactorWitdh, ;
ownd:obar:acontrols[i]:nHeight * nFactorHeight , ;
.F. )
* redimensiona o BMP da BARBUTTON
o:=ownd:obar:acontrols[i]:hbitmap1
if o<>0
hbmp:=ownd:obar:acontrols[i]:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
ownd:obar:acontrols[i]:hbitmap1:=o
endif
next
ownd:obar:refresh()
endif


If oWnd:ClassName()$"/TIMAGE/"

ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

Else

oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

EndIf
EndIf



if oWnd:ClassName()$"/TFOLDER/TPAGES/"

If ValType( oWnd:aDialogs ) = "A"
For nContador := 1 To Len( oWnd:aDialogs )
AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F.,lFullres )
EndFor
EndIf


Elseif oWnd:ClassName()$"/TBTNBMP/"

*********************************
* redimensiona o BMP do BTNBMP
o:=oWnd:hbitmap1
if o<>0
hbmp:=ownd:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
oWnd:hbitmap1:=o
endif
*********************************



elseif oWnd:ClassName()$"/TCOMBOBOX/TDBCOMBO/"


Else
If ValType( oWnd:aControls ) = "A"
For nContador := 1 To Len( oWnd:aControls )

AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F.,lFullres )

* ajuste de fontess
* controle TSAY
if ownd:acontrols[nContador]:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajustalarg(ownd:acontrols[nContador],ownd,nfactorwitdh,lFullres)

ELSEif ownd:acontrols[nContador]:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)

ELSEif ownd:acontrols[nContador]:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd:acontrols[nContador],nFactorHeight)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)
endif

EndFor
EndIf
EndIf

* se diminuiu a altura
If nFactorHeight < 1

*****************************
* se tiver barbutton * NOVO *
*****************************
if ownd:obar <> NIL
ownd:obar:nwidth:=ownd:obar:nwidth* nfactorwitdh
ownd:obar:nHeight:=ownd:obar:nHeight*nfactorheight
ownd:obar:nbtnwidth:=ownd:obar:nbtnwidth*nfactorwitdh
ownd:obar:nbtnHeight:=ownd:obar:nbtnHeight*nfactorheight
for i= 1 to len(ownd:obar:acontrols)
ownd:obar:acontrols[i]:Move( ownd:obar:acontrols[i]:nTop * nFactorHeight , ;
ownd:obar:acontrols[i]:nLeft * nFactorWitdh, ;
ownd:obar:acontrols[i]:nWidth * nFactorWitdh, ;
ownd:obar:acontrols[i]:nHeight * nFactorHeight , ;
.F. )

* redimensiona o BMP da BARBUTTON
o:=ownd:obar:acontrols[i]:hbitmap1
if o<>0
hbmp:=ownd:obar:acontrols[i]:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
ownd:obar:acontrols[i]:hbitmap1:=o
endif
next
ownd:obar:refresh()
endif
***************************************

if oWnd:ClassName()$"/TIMAGE/"

ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

Elseif oWnd:ClassName()$"/TBTNBMP/"

oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

*********************************
* redimensiona o BMP do BTNBMP
o:=oWnd:hbitmap1
if o<>0
hbmp:=ownd:hbitmap1
nbmpwidth := nbmpwidth(hbmp)
nbmpheight:= nbmpheight(hbmp)
larg:=nbmpwidth*nfactorwitdh
alt:=nbmpheight*nfactorheight
o:=resizebmp(o,larg ,alt )
oWnd:hbitmap1:=o
endif
*********************************


Else


oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
oWnd:nWidth * nFactorWitdh, ;
oWnd:nHeight * nFactorHeight , ;
.F. )

endif


If ValType( oWnd:aControls ) <> "A"

* ajuste de fontess
* controle TSAY
if ownd:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd,nfactorheight,lFullres)
ajustalarg(ownd,ownd,nfactorwitdh,lFullres)
ELSEif ownd:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd,nfactorheight,lFullres)
ajl_FLD(ownd,nFactorWitdh)

ELSEif ownd:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd,nFactorHeight)
ajl_FLD(ownd,nFactorWitdh)

endif


EndIf

EndIf

If lRepaint

if oWnd:lCentered // *** AAA ***//
oWnd:Center() // *** AAA ***//
endif // *** AAA ***//

oWnd:Show()

EndIf

***************************************
* se for resolucao igual a que desenhou
***************************************
elseif lAutoresize .and. nOriHeight = nHeight


if lfullres

If nResolution > 0
nFactorWitdh := nWidth / nOriWidth
nFactorHeight := nHeight / nOriHeight
ElseIf nResolution < 0
nFactorWitdh := nOriWidth / nWidth
nFactorHeight := nOriHeight / nHeight
EndIf

If oWnd:ClassName()$"/TFOLDER/TPAGES/"
If ValType( oWnd:aDialogs ) = "A"
For nContador := 1 To Len( oWnd:aDialogs )
AutResiz( lAutoresize, nWhatSize, oWnd:aDialogs[nContador], nResolution, .F.,lfullres )
EndFor
EndIf
elseif oWnd:ClassName()$"/TIMAGE/" //TBITMAP/TLISTBOX/TWBROWSE/TSSAY/TDSAY/TSAYREF/"
ad:=getcoors(ownd:hWnd)
oWnd:Move( oWnd:nTop * nFactorHeight , ;
oWnd:nLeft * nFactorWitdh, ;
((ad[4]-ad[2])) * nFactorWitdh, ;
((ad[3]-ad[1])) * nFactorHeight , ;
.F. )

elseif oWnd:ClassName()$"/TCOMBOBOX/TDBCOMBO/"


Else
If ValType( oWnd:aControls ) = "A"
For nContador := 1 To Len( oWnd:aControls )

AutResiz( lAutoresize, nWhatSize, oWnd:aControls[nContador], nResolution, .F.,lfullres )

* ajuste de fontes
* controle TSAY
if ownd:acontrols[nContador]:classname$"/TSAY/TSAYREF/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajustalarg(ownd:acontrols[nContador],ownd,nfactorwitdh,lFullres)
ELSEif ownd:acontrols[nContador]:classname$"/TGET/TSSAY/TDSAY/"
ajustaalt(ownd:acontrols[nContador],nfactorheight,lFullres)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)
ELSEif ownd:acontrols[nContador]:classname$"/TFOLDER/TPAGES/TCOMBOBOX/TGROUP/TTREE/TCHECKBOX/TBTNBMP/TTOOLBAR/TRADIO/TDBCOMBO/TTABS/TXBROWSE/TSBROWSE/TWBROWSE/"
aja_FLD(ownd:acontrols[nContador],nFactorHeight)
ajl_FLD(ownd:acontrols[nContador],nFactorWitdh)

endif

EndFor
EndIf
EndIf

endif
EndIf

Return Nil




FUNCTION AjustaLarg(oq,ownd,nfact,lfullres)
* se nao tiver fonte atribuida, nao faz !
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F.,;
nAlturaDaFonte,;
nLarguraDaFonte := oq:ofont:nwidth,;
nLarguraDoControle ,;
nTime := SECONDS()+3,;
oFontTmp,ofont

if cFontName="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nAlturaDaFonte := oq:oFont:nHeight
nlarguradafonte:=nlarguradafonte*nfact
nLarguraDoControle := oq:nWidth

if lFullres


WHILE SECONDS() < nTime // Evita congelamento da aplicação caso não seja possível recalcular a fonte

nLarguraDaFonte += 1 // Nao funciona com numeros facionados

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE nLarguraDaFonte,ABS(nAlturaDaFonte)

lFlagReleaseFont := .T.

IF oWnd:GetWidth(oq:varget(),oFontTmp) >= nLarguraDoControle
EXIT
ENDIF

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp
lFlagReleaseFont := .F.

ENDDO

IF lFlagReleaseFont
RELEASE FONT oFontTmp
ENDIF

oq:SetFont(oFont)
else


DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


endif



* oq:Refresh()

RETURN NIL


FUNCTION AjustaAlt(oq,fact,lFullres)
* se nao tiver fonte , nao faz !
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte, nAlturaDoControle
LOCAL nLarguraDaFonte, nTime:= SECONDS()+3, oFontTmp,ofont

* se nao tiver fonte, volta sem ajustar
if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nAlturaDaFonte:=oq:ofont:nheight



if lFullres


* se tiver fonte , ajusta
nAlturaDoControle := (oq:nHeight)-6

nLarguraDaFonte := oq:oFont:nWidth

nAlturadaFonte:=nalturadafonte*fact

WHILE SECONDS() < nTime // Evita congelamento da aplicação caso não seja possível recalcular a fonte

nAlturaDaFonte += 0.1 // Na altura o fracionamento funcionou

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE nLarguraDaFonte,nAlturaDaFonte

lFlagReleaseFont := .T.

IF oFontTmp:nHeight >= nAlturaDoControle
EXIT
ENDIF

oq:SetFont(oFontTmp)
oFont := oq:ofont //oSay:GetFont()

RELEASE FONT oFontTmp
lFlagReleaseFont := .F.

ENDDO

IF lFlagReleaseFont
RELEASE FONT oFontTmp
ENDIF

oq:SetFont(oFont)
else

nLarguraDaFonte := oq:oFont:nWidth
nAlturadaFonte:=nalturadafonte*fact

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


endif

* oq:Refresh()


RETURN NIL



FUNCTION ajl_FLD(oq,nf)
* se nao tiver fonte , nao faz
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte, nLarguraDaFonte := 0,;
nLarguraDoControle ,nTime:= SECONDS()+3, oFontTmp,ofont

if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//


nLarguraDoControle := oq:nWidth
nAlturaDaFonte := oq:oFont:nHeight
nLarguraDaFonte = nLarguraDaFonte*nf

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp


If oq:ClassName()$"/TXBROWSE/"

for i=1 to len(oq:acols)
* pega tamanho anterior X factor
ov:=oq:aCols[i]:nWidth * nf
* atualiza o novo tamanho da coluna
oq:aCols[i]:nWidth := ov
next

elseif oq:classname$"/TDSAY/"

oq:Refresh()

elseif oq:ClassName()$"/TWBROWSE/"

* atualiza a largura das colunas
for i=1 to len(oq:acolsizes)
oq:acolsizes[i]:=oq:acolsizes[i]*nf
next

endif

* oq:Refresh()

RETURN NIL



FUNCTION aja_FLD(oq,nf)
LOCAL cFontName := iif ( oq:oFont=NIL , "NAOFAZ" ,oq:oFont:cFaceName )
LOCAL lFlagReleaseFont := .F., nAlturaDaFonte := 0,;
nLarguraDaFonte, oFontTmp,ofont

if cfontname="NAOFAZ"
return nil
endif

if oq:oFont:nWidth = NIL // *** AAA ***//
oq:oFont:nWidth := 0 // *** AAA ***//
endif // *** AAA ***//

nLarguraDaFonte := oq:oFont:nWidth
nAlturadaFonte:=nalturadafonte*nf

DEFINE FONT oFontTmp;
NAME cFontName;
SIZE abs(nLarguraDaFonte),ABS(nAlturaDaFonte)

oq:SetFont(oFontTmp)
oFont := oq:ofont //osay:GetFont()

RELEASE FONT oFontTmp

If oq:ClassName()$"/TXBROWSE/"
oq:nRowHeight := oq:nRowHeight* nf
oq:nStretchcol:=STRETCHCOL_LAST

elseif oq:ClassName()$"/TSBROWSE/"

oq:nHeightCell:=oq:nHeightCell * nf
* oq:nheightHead:=oq:nheightHead*nf
* oq:nheightFoot:=oq:nheightFoot*nf



endif

* oq:Refresh()

RETURN NIL
[/code]


* oq:Refresh()

RETURN NIL


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...