Results 1 to 2 of 2

Thread: Adjust to different monitors/Display resolutions?

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Jul 1999
    Location
    Huntingdon Valley, PA 19006
    Posts
    1,151
    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.

  2. #2
    _______ HeSaidJoe's Avatar
    Join Date
    Jun 1999
    Location
    Canada
    Posts
    3,946

    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
  •  



Click Here to Expand Forum to Full Width