devxlogo

How to Automatically Resize Forms

How to Automatically Resize Forms

The ElasticForm subroutine, part of CodeBank’s standard procedurelibrary, automatically repositions and sizes all controls on anSDI form when the user or code resizes the form. To use the routine,simply lay out the form as you normally would in design mode.Then call the subroutine once in the Form_Load event, with theInit parameter set to true, so that it can record the initialpositions of the controls. Call the sub in the Form_Resize event,with Init set to False, to automatically resize and repositionthe controls. The procedure accommodates any number of nestedcontainers, any ScaleMode, and all types of controls. Note, however,that the procedure relies on the Tag property to store positioninformation for each control, and so cannot be used if Tag isbeing used for another purpose (see ElasticFormArray). Also, MDIchild forms are resized by VB before the Form_Load or Form_Initializeevents, so the proportions of each form will be distorted. WithMDI children, you must use ElasticFormArray (available in CodeBank’sstandard library) and specify the optional DesignWidth and DesignHeightparameters:

 Public Sub ElasticForm(frm As Form, _        Init As Integer)On Error Resume NextDim ctl As ObjectIf Init = True Then        For Each ctl In frm.Controls                ctl.Tag = Format$(ctl.Left _                        / frm.ScaleWidth, ".0000") _                        & Format$(ctl.Top / frm.Scale_                        Height, ".0000") & Format$_                        (ctl.Width / frm.ScaleWidth, _                        ".0000") & Format$(ctl._                        Height / frm.ScaleHeight, _                        ".0000")        Next ctlElse        For Each ctl In frm.Controls                ctl.Move Val(Mid$(ctl.Tag, 1, _                        5)) * frm.ScaleWidth, _                        Val(Mid$(ctl.Tag, 6, 5)) * _                        frm.ScaleHeight, Val(Mid$_                        (ctl.Tag, 11, 5)) * frm._                        ScaleWidth, Val(Mid$(ctl.Tag, 16, _                        5)) * frm.ScaleHeight        Next ctlEnd IfEnd Sub

devx-admin

Share the Post: