| | |
Problem in resizing forms........
Thread Solved |
•
•
Join Date: Nov 2007
Posts: 58
Reputation:
Solved Threads: 2
hi all,
I have one problem with resizing forms.
I am developing our application in vb and i gave code for resizing forms in resize event of form. First i save the sizes of all controls in forms in form load event and then in resize event i resizes all controls of form. So that my application can run on any screen resolution.
My problem is i am using tab control for what is happening is whatever tab is active at the time of running application that controls are visible to me but other tabs controls are not visible.
When i debug the application i found that other controls left value is coming in minus that is -68940.
That's why control is not visible to user after resizing it. I am getting the problem.
Can anybody tell me what is the problem with solution.
Thanks in advance.
Regards
Guest11
I have one problem with resizing forms.
I am developing our application in vb and i gave code for resizing forms in resize event of form. First i save the sizes of all controls in forms in form load event and then in resize event i resizes all controls of form. So that my application can run on any screen resolution.
My problem is i am using tab control for what is happening is whatever tab is active at the time of running application that controls are visible to me but other tabs controls are not visible.
When i debug the application i found that other controls left value is coming in minus that is -68940.
That's why control is not visible to user after resizing it. I am getting the problem.
Can anybody tell me what is the problem with solution.
Thanks in advance.
Regards
Guest11
In a form_resize event your form will resize. What will not resize and relocate automatically are your controls. They will remain at the locations originally specified in the design view.
So your problem is how do I write code to resize and relocate my controls?
Use ratios. Use ratios. Use ratios. Use ratios. Use ratios. Use algebra. Use algebra. Use Equations.
This is one example.
Find the new left position:
Ratio Formula
Original Width/ New Width = Original Left/ New Left
You know the original width of your form. Let's say it is 2200. After a resize event, it changes to 2800. And you know the current left position of your control:
Use your formula:
2200 / 2800 = lngLeft / New Left
The only value you don't know is New Left.
Cross Multiply to solve a ratio Equation: Multiply tops * bottoms. If you know algebra, then you should be able to figure this out.
But in the example it works like this:
2200 * New Left = 2800 * lngLeft
To solve this equation isolate NewLeft:
NewLeft = (2800 * lngLeft) / 2200
You have just solved for the left position of one control.
Use the same principle for solving for the top value, but use a different formula:
Original Height / New Height = lngTop / NewTop
In the resize event, you first extract the New Height. extract the current top value of your control. and then use the formula to figure out the NewTop value.
Do the same for Width and Height values of the control.
Original Width / NewWidth = MyControl.Width / NewControlWidth
Isolate the only unknown value in the above equation (New Control Width) as above and set the width as before
Mycontrol.Width = NewControlWidth
Same for Height:
I'll let you figure that out equation.
But another problem that you'll face is how do I deal with 50 controls of different types?
I personally use the Controls Collection in VB6. You can stick this code inside your form in the appropriate places.
So your problem is how do I write code to resize and relocate my controls?
Use ratios. Use ratios. Use ratios. Use ratios. Use ratios. Use algebra. Use algebra. Use Equations.
This is one example.
Find the new left position:
Ratio Formula
Original Width/ New Width = Original Left/ New Left
You know the original width of your form. Let's say it is 2200. After a resize event, it changes to 2800. And you know the current left position of your control:
Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
Dim lngLeft as long lngLeft = MyControl.Left
2200 / 2800 = lngLeft / New Left
The only value you don't know is New Left.
Cross Multiply to solve a ratio Equation: Multiply tops * bottoms. If you know algebra, then you should be able to figure this out.
But in the example it works like this:
2200 * New Left = 2800 * lngLeft
To solve this equation isolate NewLeft:
NewLeft = (2800 * lngLeft) / 2200
You have just solved for the left position of one control.
Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
MyControl.left = NewLeft
Use the same principle for solving for the top value, but use a different formula:
Original Height / New Height = lngTop / NewTop
In the resize event, you first extract the New Height. extract the current top value of your control. and then use the formula to figure out the NewTop value.
Do the same for Width and Height values of the control.
Original Width / NewWidth = MyControl.Width / NewControlWidth
Isolate the only unknown value in the above equation (New Control Width) as above and set the width as before
Mycontrol.Width = NewControlWidth
Same for Height:
I'll let you figure that out equation.
But another problem that you'll face is how do I deal with 50 controls of different types?
I personally use the Controls Collection in VB6. You can stick this code inside your form in the appropriate places.
Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
Option Explicit Dim lngCurrentWidth as long, lngCurrentHeight as long Private Sub Form_Load lngCurrentWidth = Me.Width lngCurrentHeight = Me.Height End Sub Private Sub Form_Resize() On error Resume Next Dim ctl as Control dim strName as string dim lngNewWidth as long, lngNewHeight as long lngNewWidth = Me.Width lngNewHeight = Me.Height For each ctl in Me ' Me would refer to the form ' Find out which control with the TypeName function strName = TypeName(ctl) ' You can deal with different controls in the same ' way or differently to suit your program using a ' Select Case Logic structure. Select Case strName Case "CommandButton", "Label", "TextBox" ' Code to deal with left, height, Width, and Height lngLeft = ctl.left lngTop = ctl.Top lngWidth = ctl.Width lngHeight = ctl.Height ' Solve your formulas here and assign the values to the control ctl.left = WhateverVariable you've declared for this ctl.Top = '[ ...... ctl.Width = ' .................. ' etc. Case "PictureBox" ' Code to deal with left, height, Width, and Height Case Else End Select Next lngCurrentWidth = lngNewWidth lngCurrentHeight = lngNewHeight End Sub
I don't know. It's hard to tell from the info you've given, but really the only 2 values you need to keep track of are the current width and the current height of the form. You notice I track them immediately upon the Form_Load event and at the end of the resize event.
And you should also notice that there is an
And you should also notice that there is an
On Error Resume Next statement at the beginning of the Form_Resize event. Usually, those negative values come from minimizing the window or coming up with a value that doesn't make sense. You may have to write an error loop to catch those negative values in the resize event and make sure that the current width and current height values of the form are not negative. Once they change to negative, you may have problems changing them back. ![]() |
Other Threads in the Visual Basic 4 / 5 / 6 Forum
- Previous Thread: ADODB.Stream Object
- Next Thread: Can someone help me solve this visual basic 6.0 / SQL statement error I am getting?
Views: 776 | Replies: 5
| Thread Tools | Search this Thread |
Tag cloud for Visual Basic 4 / 5 / 6
* 6 429 2007 access activex add append application basic beginner bmp calculator cd cells.find code college column component connection connectionproblemusingvb6usingoledb copy creat data database datareport date delete desktop dissertations dissertationthesis dissertationtopic edit error excel excelmacro file filename filter form group hardware header iamthwee ide image internetfiledownload label list listbox listview liveperson looping machine mail match metadata microsoft movingranges open oracle pos prime print printer program prompt random range range-objects readfile reading record remotesqlserverdatabase report save search sendbyte sites sort spectateswamp sql sql2008 sqlserver struct table tags textbox time timer urldownloadtofile variable vb vb6 vb6.0 vba visual visualbasic visualbasic6 web






