Clipper On Line • Ver Tópico - Resolução da Tela

Resolução da Tela

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Resolução da Tela

Mensagempor Kapiaba » 24 Set 2014 12:23

Galera, me ajuada 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.

http://fivewin.com.br/index.php?/topic/22107-combombox-com-displayprg/
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Resolução da Tela

Mensagempor Kapiaba » 24 Set 2014 15:47

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
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Resolução da Tela

Mensagempor Kapiaba » 24 Set 2014 15:48

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

   endif

*   oq:Refresh()

RETURN NIL


Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Resolução da Tela

Mensagempor rochinha » 24 Set 2014 21:36

Amiguinhos,

As funções que retornam o tamanho da resolução do desktop e não da aplicação são:
   ...
   ResLargura := GetSysMetrics(0)   
   ResAltura  := GetSysMetrics(1)
   ...


Eu gosto de fazer meu sistema agir como os aplicativos do Windows que quando voce fecha eles, ao abrir novamente estão com a resolução e posicionamento do momento do fechamento.
   ...
   TelaMTopo      := Val(VerifyINI( "PROGRAMA"  , "COORDT", "000"            , cPath+"nfw.ini" ))
   TelaMEsque     := Val(VerifyINI( "PROGRAMA"  , "COORDL", "000"            , cPath+"nfw.ini" ))
   ResAltura      := Val(VerifyINI( "PROGRAMA"  , "COORDH", str(ResAltura)   , cPath+"nfw.ini" ))
   ResLargura     := Val(VerifyINI( "PROGRAMA"  , "COORDW", str(ResLargura)  , cPath+"nfw.ini" ))
   ...

No momento da abertura de meu sistema passo as informações destes posicionamentos salvos para o comando de janela:
   ...
   // Inicializa o sistema
   DEFINE WINDOW oWnd FROM TelaMTopo,TelaMEsque TO ResAltura,ResLargura PIXEL BRUSH oSetBrush TITLE c5vTitle MDI MENU oMenu2 ICON oIcon
   ...

Lógico que só isto não basta, ainda é necessário pensar em dois eventos que acontecem quando se manipula janelas, que são, mover e fechar.

Então sacamos do recurso Resize:
   ...
   ACTIVATE WINDOW oWnd MAXIMIZED ;
         ON RESIZE SalvaCoordenadas(oWnd) ;
   ...

A função SalvaCoordenadas() fará o salvamento das quatro posições em arquivo externo a cada movimento.

No momento de fechar, salvo novamente as coordenadas para uso posterior:
   ...
   ACTIVATE WINDOW oWnd MAXIMIZED ;
         VALID ( SalvaCoordenadas(oWnd), ...) ;
   ...


Minha função que salva as coordenadas, apresenta na barra de status, quando movimento o tamanho da tela as posições:
   ...
function SalvaCoordenadas(oWnd)
   VerifyINI( "PROGRAMA", "COORDT", GetWndRect(oWnd:hWnd)[1], cPathDados+"nfw.ini", .t. )
   VerifyINI( "PROGRAMA", "COORDL", GetWndRect(oWnd:hWnd)[2], cPathDados+"nfw.ini", .t. )
   VerifyINI( "PROGRAMA", "COORDH", GetWndRect(oWnd:hWnd)[3], cPathDados+"nfw.ini", .t. )
   VerifyINI( "PROGRAMA", "COORDW", GetWndRect(oWnd:hWnd)[4], cPathDados+"nfw.ini", .t. )
   oWnd:SetMsg( "("+strZero(GetWndRect(oWnd:hWnd)[1],4)+","+;
                    strZero(GetWndRect(oWnd:hWnd)[2],4)+","+;
                    strZero(GetWndRect(oWnd:hWnd)[3],4)+","+;
                    strZero(GetWndRect(oWnd:hWnd)[4],4)+")" )
   return nil   
   ...

A função VerifyINI() faz o salvamento do conteúdo em arquivo .INI usando uma classe tINI do Fivewin.
   ...
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
   oIni := TIni():New( _inifile_ )
   if _grava_ = .t.
      oIni:Set( _section_, _entry_, _var_ )
   endif
   return oIni:Get( _section_, _entry_, _var_, _var_ )
   ...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Resolução da Tela

Mensagempor Kapiaba » 25 Set 2014 09:31

Valeu Rochinha, funciona das duas formas.

   nResHoriz := GetSysMetrics(0)
   nResVert  := GetSysMetrics(1)


Obg. Abs
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro