buggod
asked on
Maintain Aspect in Different Screen Resolutions
I am developing an app with many forms and controls.
It has come to my attention (Quite early thankfully) that when the screen resolution, and more specificly, the font size, changes, my app no longer looks as it should!
Please could you supply me with some code which would detect the screen res/ font size, and adjust my app accordingly.
Many thanks...
It has come to my attention (Quite early thankfully) that when the screen resolution, and more specificly, the font size, changes, my app no longer looks as it should!
Please could you supply me with some code which would detect the screen res/ font size, and adjust my app accordingly.
Many thanks...
ASKER
Waty:
Thanks for the code. It kind of works okay, however I still have one problem:
My main form is an MDI form, which contains a picture box (To hold a Treeview) The other forms are loaded as child forms into this MDI form, allowing for the size of the picture box.
Although this code resizes them okay, I am still having trouble making them the correct size to fit into the MDI workspace.
Is there any alterations I could make to this code, to make them fit the same when the font size/ screen res changes?
For example, with a res of 1024 and small fonts they fit fine, but with a res of 1280 and large fonts they are a little too small.
Piffling little problem I know, but one which is becoming increasingly annoying!
Any further info you could give would be greatly appreciated...
BG
Thanks for the code. It kind of works okay, however I still have one problem:
My main form is an MDI form, which contains a picture box (To hold a Treeview) The other forms are loaded as child forms into this MDI form, allowing for the size of the picture box.
Although this code resizes them okay, I am still having trouble making them the correct size to fit into the MDI workspace.
Is there any alterations I could make to this code, to make them fit the same when the font size/ screen res changes?
For example, with a res of 1024 and small fonts they fit fine, but with a res of 1280 and large fonts they are a little too small.
Piffling little problem I know, but one which is becoming increasingly annoying!
Any further info you could give would be greatly appreciated...
BG
Sorry, no more ideas :(
ASKER
Waty:
Thanks for the quick reply. I will reject the answer and see if anyone else can come up with anything.
Thanks again..
BG
Thanks for the quick reply. I will reject the answer and see if anyone else can come up with anything.
Thanks again..
BG
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks - I will do that
BG
BG
' #VBIDEUtils#**************
' * Programmer Name : Mikhail Shmukler
' * Web Site : www.geocities.com/ResearchTriangle/6311/
' * E-Mail : waty.thierry@usa.net
' * Date : 13/10/98
' * Time : 10:24
' * Module Name : class_Elastic
' * Module Filename : Elastic.cls
' **************************
' * Comments :
' * This class can change size and location of controls On your form
' * 1. Resize form
' * 2. Change screen resolution
' * Assumes:1. Add Elastic.cls
' * 2. Add declaration 'Private El as New class_Elastic'
' * 3. Insert string like 'El.init Me' (formload event)
' * 4. Insert string like 'El.FormResize Me' (Resize event)
' * 5. Press 'F5' and resize form ....
'
'*************************
Option Explicit
Private nFormHeight As Integer
Private nFormWidth As Integer
Private nNumOfControls As Integer
Private nTop() As Integer
Private nLeft() As Integer
Private nHeight() As Integer
Private nWidth() As Integer
Private nFontSize() As Integer
Private nRightMargin() As Integer
Private bFirstTime As Boolean
Sub Init(frm As Form, Optional nWindState As Variant)
Dim I As Integer
Dim bWinMax As Boolean
bWinMax = Not IsMissing(nWindState)
nFormHeight = frm.Height
nFormWidth = frm.Width
nNumOfControls = frm.Controls.Count - 1
bFirstTime = True
ReDim nTop(nNumOfControls)
ReDim nLeft(nNumOfControls)
ReDim nHeight(nNumOfControls)
ReDim nWidth(nNumOfControls)
ReDim nFontSize(nNumOfControls)
ReDim nRightMargin(nNumOfControl
On Error Resume Next
For I = 0 To nNumOfControls
If TypeOf frm.Controls(I) Is Line Then
nTop(I) = frm.Controls(I).Y1
nLeft(I) = frm.Controls(I).X1
nHeight(I) = frm.Controls(I).Y2
nWidth(I) = frm.Controls(I).X2
Else
nTop(I) = frm.Controls(I).Top
nLeft(I) = frm.Controls(I).Left
nHeight(I) = frm.Controls(I).Height
nWidth(I) = frm.Controls(I).Width
nFontSize(I) = frm.FontSize
nRightMargin(I) = frm.Controls(I).RightMargi
End If
Next
If bWinMax Or frm.WindowState = 2 Then ' maxim
frm.Height = Screen.Height
frm.Width = Screen.Width
Else
frm.Height = frm.Height * Screen.Height / 7290
frm.Width = frm.Width * Screen.Width / 9690
End If
bFirstTime = True
End Sub
Sub FormResize(frm As Form)
Dim I As Integer
Dim nCaptionSize As Integer
Dim dRatioX As Double
Dim dRatioY As Double
Dim nSaveRedraw As Long
On Error Resume Next
nSaveRedraw = frm.AutoRedraw
frm.AutoRedraw = True
If bFirstTime Then
bFirstTime = False
Exit Sub
End If
If frm.Height < nFormHeight / 2 Then frm.Height = nFormHeight / 2
If frm.Width < nFormWidth / 2 Then frm.Width = nFormWidth / 2
nCaptionSize = 400
dRatioY = 1# * (nFormHeight - nCaptionSize) / (frm.Height - nCaptionSize)
dRatioX = 1# * nFormWidth / frm.Width
On Error Resume Next ' for comboboxes, timeres and other nonsizible controls
For I = 0 To nNumOfControls
If TypeOf frm.Controls(I) Is Line Then
frm.Controls(I).Y1 = Int(nTop(I) / dRatioY)
frm.Controls(I).X1 = Int(nLeft(I) / dRatioX)
frm.Controls(I).Y2 = Int(nHeight(I) / dRatioY)
frm.Controls(I).X2 = Int(nWidth(I) / dRatioX)
Else
frm.Controls(I).Top = Int(nTop(I) / dRatioY)
frm.Controls(I).Left = Int(nLeft(I) / dRatioX)
frm.Controls(I).Height = Int(nHeight(I) / dRatioY)
frm.Controls(I).Width = Int(nWidth(I) / dRatioX)
frm.Controls(I).FontSize = Int(nFontSize(I) / dRatioX) + Int(nFontSize(I) / dRatioX) Mod 2
frm.Controls(I).RightMargi
End If
Next
frm.AutoRedraw = nSaveRedraw
End Sub