|
-
Apr 27th, 2000, 11:44 PM
#1
Thread Starter
Frenzied Member
I want my application to change size of forms and various controls to accomodate different monitors and different resolutions for the same monitor. I am doing some point plotting, using ScaleMode 7 (Centimeters) for a Picture Box (where I plot points) and ScaleMode 1 (Twips) elsewhere.
Any advice, hints, citations, etcetera would be appreciated.
I am working with VB6. I have Visual Studio & MSDN Library.
First, are above Scale Modes reasonable for my purposes? They seem to work okay, but I have yet to add logic for Display changes.
MSDN shows sample code using Sysinfo1_Displaychanged Event. Example uses Screen.TwipsPerPixelX to decide how to size controls. For my System, TwipsPerPixelX does not change when I change from 640X480 to 1024X768. An experiment suggests that Sysinfo1.WorkAreaWidth changes. Does ScaleMode setting affect these variables?
What affects TwipsPerPixel? How do I check for Display Resolution? How do I detect a Monitor with a different Dot Pitch? Should I worry about Dot Pitch?
Any clues you can give me about Twips, Pixels, Scale Mode, Screen sizes, et cetera would be appreciated.
Thanx
Live long & prosper.
The Dinosaur from prehistoric era prior to computers.
Eschew obfuscation!
If a billion people believe a foolish idea, it is still a foolish idea!
VB.net 2010 Express
64Bit & 32Bit Windows 7 & Windows XP. I run 4 operating systems on a single PC.
-
Apr 27th, 2000, 11:57 PM
#2
_______
Found this sometime back...might be what you want
' #VBIDEUtils#************************************************************
' * Programmer Name : Mikhail Shmukler
' * Web Site : http://www.geocities.com/ResearchTriangle/6311/
' * E-Mail : [email protected]
' * 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(nNumOfControls)
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).RightMargin
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).RightMargin = Int(nRightMargin(I) / dRatioY)
End If
Next
frm.AutoRedraw = nSaveRedraw
End Sub
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|