kapiaba Posted September 23, 2014 Report Share Posted September 23, 2014 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, Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 23, 2014 Author Report Share Posted September 23, 2014 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 23, 2014 Author Report Share Posted September 23, 2014 Este exemplo me gerou uma dúvida, como que eu passaria a Resolução automáticamente para o ON INIT do ACTIVATE DIALOG? Obg. abs. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 24, 2014 Author Report Share Posted September 24, 2014 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. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 24, 2014 Author Report Share Posted September 24, 2014 Não entendi onde o William Adami se baseou para criar estes parametros para as resoluções de tela: Vejam: http://es.screenresolution.org/ abs Quote Link to comment Share on other sites More sharing options...
william Posted September 24, 2014 Report Share Posted September 24, 2014 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 Quote Link to comment Share on other sites More sharing options...
henning Posted September 24, 2014 Report Share Posted September 24, 2014 O grande problema desse tipo de abordagem é que sempre teremos resoluções bizarras.... para vc ter uma ideia consultando as estatísticas do site da minha empresa tiveram 289 resoluções de tela diferentes, logico que entra também celulares nessas estatísticas..... Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 24, 2014 Author Report Share Posted September 24, 2014 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 24, 2014 Author Report Share Posted September 24, 2014 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 25, 2014 Author Report Share Posted September 25, 2014 Valeu Rochinha, funciona das duas formas. nResHoriz := GetSysMetrics(0) nResVert := GetSysMetrics(1) Obg. Abs Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.