Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Forms and screen resolution
Message
De
24/04/2009 06:38:09
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Gestionnaire d'écran & Écrans
Divers
Thread ID:
01396126
Message ID:
01396209
Vues:
243
Is there an established method to getting a form to fill up the entire screen whether the screen is set to 600x800 or 1024x??? Users are employing differing resolutions. In web design I can make use of CSS fluid design but how bout in VFP?
**************************************************
*-- Class:        frmmaximize
*-- ParentClass:  form
*-- Self maximizing form for sovereign applications
*
Define Class frmmaximize As Form
  DoCreate = .T.
  *-- SYSMETRIC( 1 ) / 640
  widthratio = 0
  *-- SYSMETRIC( 2 ) / 480
  heightratio = 0
  Name = "frmmaximize"

  *-- Drill down into pageframes, pages, grids, etc on the form and resize all of the controls
  Procedure resizecontrols
    Lparameters toControl
    Local loPage, loControl, loColumn, lnColumnWidths[1], lnCol

    If Pemstatus( toControl, 'Width', 5 )
      toControl.Width = toControl.Width * Thisform.widthratio
    Endif
    If Pemstatus( toControl, 'Height', 5 )
      toControl.Height = toControl.Height * Thisform.heightratio
    Endif
    If Pemstatus( toControl, 'Top', 5 )
      toControl.Top = toControl.Top * Thisform.heightratio
    Endif
    If Pemstatus( toControl, 'Left', 5 )
      toControl.Left = toControl.Left * Thisform.heightratio
    Endif
    *** Now resize the font of the control, grid (naturally <g>) is a special case because
    *** resizing the font resizes the column widths of the grid, so save and restore them
    If Upper( Alltrim( toControl.BaseClass ) ) = 'GRID'
      Dimension lnColumnWidths[toControl.ColumnCount]
      For lnCol = 1 To toControl.ColumnCount
        lnColumnWidths[lnCol] = toControl.Columns[lnCol].Width
      Endfor
      toControl.FontSize = Int( toControl.FontSize * Thisform.widthratio )
      For lnCol = 1 To toControl.ColumnCount
        toControl.Columns[lnCol].Width = lnColumnWidths[lnCol]
      Endfor
    Else
      If Pemstatus( toControl, 'Fontsize', 5 )
        toControl.FontSize = Int( toControl.FontSize * Thisform.widthratio )
      Endif
    Endif
    Do Case
      Case Upper( toControl.BaseClass ) = 'PAGEFRAME'
        For Each loPage In toControl.Pages
          Thisform.resizecontrols( loPage )
        Endfor

      Case Inlist( Upper( toControl.BaseClass ), 'PAGE', 'CONTAINER' )
        For Each loControl In toControl.Controls
          Thisform.resizecontrols( loControl )
        Endfor

      Case Upper( toControl.BaseClass ) = 'GRID'
        With toControl
          .RowHeight     = .RowHeight * Thisform.heightratio
          .HeaderHeight  = .HeaderHeight * Thisform.heightratio
          For Each loColumn In .Columns
            loColumn.Width = loColumn.Width * Thisform.widthratio
          Endfor
        Endwith

      Case Inlist( Upper( toControl.BaseClass ), 'COMBOBOX', 'LISTBOX' )
        Local lnCol, lnStart, lnEnd, lnLen, lcColumnWidths
        With toControl
          If .ColumnCount < 2
            .ColumnWidths = Alltrim( Str( .Width ) )
          Else
            lcColumnWidths = ''
            lnStart = 1
            For lnCol = 1 To .ColumnCount - 1
              lnEnd = At( ',', .ColumnWidths, lnCol )
              lnLen = lnEnd - lnStart
              lcColumnWidths = lcColumnWidths + Iif( Empty( lcColumnWidths ), '', ',' ) + Alltrim( Str( Val (Substr( .ColumnWidths, lnStart, lnLen ) ) * Thisform.widthratio ) )
              lnStart = lnEnd + 1
            Endfor
            lnLen = Len( .ColumnWidths ) - lnStart + 1
            lcColumnWidths = lcColumnWidths + ',' + Alltrim( Str( Val (Substr( .ColumnWidths, lnStart, lnLen ) ) * Thisform.widthratio ) )
            .ColumnWidths = lcColumnWidths
          Endif
        Endwith

      Case Inlist( Upper( Alltrim( toControl.BaseClass ) ), 'COMMANDGROUP', 'OPTIONGROUP' )
        Local lnButton
        For lnButton = 1 To toControl.ButtonCount
          Thisform.resizecontrols( toControl.Buttons[lnButton] )
        Endfor

      Otherwise
        *** There is no otherwise...I think we got all cases
    Endcase
  Endproc


  Procedure Init
    Local loControl

    With Thisform
      *** Determine the ratio needed to maximize the form
      *** depending on screen resolution and store it to form properties
      .widthratio = Sysmetric( 1 ) / 640
      .heightratio = Sysmetric( 2 ) / 480
      *** If resolution is higher than 640 x 480, reposition
      *** and maximize the form
      If .widthratio > 1
        .Top = 0
        .Left = 0
        .Width = .Width * .widthratio
        .Height = .Height * .heightratio
        *** And resize each control contained in the form
        For Each loControl In .Controls
          .resizecontrols( loControl )
        Endfor
      Endif
    Endwith
  Endproc


Enddefine
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform