Jump to content
Fivewin Brasil

Expandir Dialog de acordo com a resolução do monitor


alex2002

Recommended Posts

Olá pessoal,

Tenho notado que nos micros mais novos, as dialogs estão ficando muito pequenas. Sei que no fórum aqui houve uma solução pra isso. Alguém lembra ou usa a solução?

Quero aumentar o tamanho da dialog de acordo com a resolução do windows, assim consigo fazer ficar bacana o sistema. 

Mas não me lembro nem a pau onde está essa solução.

Um abraço,

Alexandre Pereira

Link to comment
Share on other sites

Pode fazer assim:

Local aCoors := GetCoors( FindWindow("Shell_TrayWnd","") )
DEFINE DIALOG oDlg  FROM 0,0 TO aCoors[1]-30, aCoors[4]-7 PIXEL TITLE "TODA LA PANTALLA"
 

ou assim:

 

nCol:=GetSysMetrics(0)
nLin:=GetSysMetrics(1)

DEFINE DIALOG oDlg FROM 0,0 TO nLin-20,nCol-30 title "Título do diálogo" PIXEL


 

Link to comment
Share on other sites

12 horas atrás, mkyx disse:

Pode fazer assim:

Local aCoors := GetCoors( FindWindow("Shell_TrayWnd","") )
DEFINE DIALOG oDlg  FROM 0,0 TO aCoors[1]-30, aCoors[4]-7 PIXEL TITLE "TODA LA PANTALLA"
 

ou assim:

 

nCol:=GetSysMetrics(0)
nLin:=GetSysMetrics(1)

DEFINE DIALOG oDlg FROM 0,0 TO nLin-20,nCol-30 title "Título do diálogo" PIXEL


 

Obrigado amigo,

Mas a solução não seria apenas redimensionar a dialog mas sim todo o conteúdo dentro. Exatamente a solução que o João postou (não testei ainda nos meus fontes, mas vi que é exatamente isso pelo que observei do exemplo). 

O que tem acontecido é que hoje as resoluções são cada vez melhores e os monitores maiores, isso faz com que o GET, SAY, BUTTON... por exemplo fiquem nanico nestas telas e chega a ficar feio. Para podermos aumentar tudo fica complicado, teríamos que mexer em tamanho das fontes além de redimensionar tudo. 

A solução que o João postou faz exatamente isso, ela redimensiona fazendo um relacionamento entre o que foi desenhado e a resolução atual. Assim que testar eu posto o parecer aqui.

Um abraço,

Alexandre Pereira

 

Link to comment
Share on other sites

Uso este método da dialog.prg (modificada) que tá dando certo até o momento.

Modo de usar: ACTIVATE DIALOG oDlg ON INIT (oDlg:MISetSize(.T.), oDlg(0, 0))

Método declarado na dialog.prg

METHOD MISetSize( lChFnt )

Método definido:

METHOD MISetSize( lChFnt ) CLASS TDialog

   LOCAL hDlg := ::hWnd
   LOCAL hCtrl := GetWindow( hDlg, GW_CHILD )
   LOCAL hFont, oFont, I, AINFO, aRect, nWidth, nHeight, lRepaint:=.T.
   LOCAL nPorH, nPorV, nIdControl, nPosControl

   DEFAULT lChFnt := .F.
   aPor := DLG_RESOLUCION( Self )

   nPorH := aPor[1]
   nPorV := aPor[2]

   if nPorh=1 .and. nPorv=1
   return nil
   endif

   nWidth := ::nWidth * nPorH
   nHeight:= ::nHeight * nPorV

   Super:SetSize( nWidth, nHeight, lRepaint )

   ::Move( MAX( WndTop( hDlg),1), MAX(WndLeft( hDlg),1) )

   **** Redimensionamento dos Controles

   While hCtrl != 0 .AND. GetParent( hCtrl ) == hDlg

      aRect := GetClientRect( hCtrl )
      nWidth := (aRect[4]-aRect[2]) * nPorH
      nHeight := (aRect[3]-aRect[1]) * nPorV
      WndSetSize( hCtrl, nWidth, nHeight, lRepaint )
      WndLeft( hCtrl, WndLeft( hCtrl) * nPorh)
      WndTop( hCtrl, WndTop( hCtrl) * nPorv)
      hCtrl = GetWindow( hCtrl, GW_HWNDNEXT )

   Enddo

   *** Redimensionamento das Fontes

   FOR I=1 TO LEN(::aControls)
      IF ::aControls[I]:ofont != nil
         hFont := ::aControls[I]:ofont:hFont
         aInfo = GetFontInfo( hFont )
         oFont = TFont():New( ::aControls[I]:ofont:cFaceName, ;
                              IIF(!lChFnt, aInfo[2], (aInfo[2]*nPorH)), (aInfo[1] * nPorV),,;
                              ::aControls[I]:ofont:lBold, ;
                              ::aControls[I]:ofont:nEscapement, ;
                              ::aControls[I]:ofont:nOrientation, ;
                              aInfo[3], ::aControls[I]:ofont:lItalic, ;
                              ::aControls[I]:ofont:lUnderline, ;
                              ::aControls[I]:ofont:lStrikeOut, ;
                              ::aControls[I]:ofont:nCharSet, ;
                              ::aControls[I]:ofont:nOutPrecision, ;
                              ::aControls[I]:ofont:nClipPrecision, ;
                              ::aControls[I]:ofont:nQuality, )
         ::aControls[I]:SETFONT(ofont)
      endif
   NEXT
   SysRefresh()
Return Nil

FUNCTION DLG_RESOLUCION( oDlg )
   LOCAL aPor := {1,1},;
         nWidth := GetSysMetrics(0),;
         nHeight := GetSysMetrics(1)

   nTWid := WndWidth(FindWindow( 'Shell_TrayWnd',nil))
   IF nTWid < nWidth // TrayBar position: Right or left
      * nWidth -= nTWid
   ENDIF

   nThei := WndHeight(FindWindow( 'Shell_TrayWnd',nil))
   IF nThei < nHeight // TrayBar position: Bottom or top
      * nHeight -= nThei
   ENDIF

   nBwid := ((100/oDlg:nWidth)*nWidth)/100
   nBhei := ((100/oDlg:nHeight)*nHeight)/100
   aPor := {nBwid, nBhei}
RETURN aPor

 

Link to comment
Share on other sites

Neste trecho a fonte é redimensionada. Veja aí o que pode ser feito. :D

      IF ::aControls[I]:ofont != nil
         hFont := ::aControls[I]:ofont:hFont
         aInfo = GetFontInfo( hFont )
         oFont = TFont():New( ::aControls[I]:ofont:cFaceName, ;
                              IIF(!lChFnt, aInfo[2], (aInfo[2]*nPorH)), (aInfo[1] * nPorV),,;
                              ::aControls[I]:ofont:lBold, ;
                              ::aControls[I]:ofont:nEscapement, ;
                              ::aControls[I]:ofont:nOrientation, ;
                              aInfo[3], ::aControls[I]:ofont:lItalic, ;
                              ::aControls[I]:ofont:lUnderline, ;
                              ::aControls[I]:ofont:lStrikeOut, ;
                              ::aControls[I]:ofont:nCharSet, ;
                              ::aControls[I]:ofont:nOutPrecision, ;
                              ::aControls[I]:ofont:nClipPrecision, ;
                              ::aControls[I]:ofont:nQuality, )
         ::aControls[I]:SETFONT(ofont)
      endif

Especificamente aqui:

IIF(!lChFnt, aInfo[2], (aInfo[2]*nPorH)), (aInfo[1] * nPorV),,;

 

Ah. Na função DLG_RESOLUCION( oDlg ), descomente as linhas para ficar conforme abaixo, senão não será levada em consideração a barra de botões do Windows.

   nTWid := WndWidth(FindWindow( 'Shell_TrayWnd',nil))
   IF nTWid < nWidth // TrayBar position: Right or left
      nWidth -= nTWid /* Descomentada */
   ENDIF

   nThei := WndHeight(FindWindow( 'Shell_TrayWnd',nil))
   IF nThei < nHeight // TrayBar position: Bottom or top
      nHeight -= nThei /* Descomentada */
   ENDIF

 

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