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