Userform automatisch aanpassen aan schermgrootte?

Status
Niet open voor verdere reacties.

Offthefield

Gebruiker
Lid geworden
27 apr 2005
Berichten
369
Is het mogelijk om een userform automatisch te laten aanpassen
aan de grootte van het beeldscherm?

Ik heb gebruik nl userform-menu's op verschillende computers met
beeldschermen van verschillende grootte.


Offthefield
 
Met het aanpassen van de grootte van het formulier ben je er natuurlijk niet; alle objecten op dat formulier moeten ook opnieuw geschaald worden, en bij tekstvakken zul je misschien ook de lettergroottes willen/moeten aanpassen. Of gaat het alleen om de afmetingen van het formulier?
 
Ik ben ook geïnteresseerd in het antwoord op deze vraag.
Formulier en objecten pas je op deze manier aan, maar misschien weet iemand hoe je aan de dblParameter komt? Die is afhankelijk van de door vba gevonden schermresolutie. Met andere woorden: hoe vindt vba de schermresolutie, -breedte of -hoogte?

Code:
    Dim dblParameter As Double
    dblParameter = 1
    For Each Control In Me.Controls
        Control.Top = Control.Top * dblParameter
        Control.Left = Control.Left * dblParameter
        Control.Width = Control.Width * dblParameter
        Control.Height = Control.Height * dblParameter
    Next
    Me.Width = Me.Width * dblParameter
    Me.Height = Me.Height * dblParameter
 
Met deze routine:
Code:
Option Explicit
 
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1

Code:
Private Sub Workbook_Open()
    Call VerifyScreenResolution
End Sub

Code:
Sub VerifyScreenResolution(Optional Dummy As Integer)
     
    Dim x  As Long
    Dim y  As Long
    Dim MyMessage As String
    Dim MyResponse As VbMsgBoxResult
     
    x = GetSystemMetrics(SM_CXSCREEN)
    y = GetSystemMetrics(SM_CYSCREEN)
    If x = 1024 And y = 768 Then
    Else
        MyMessage = "Your current screen resolution is " & x & " X " & y & vbCrLf & "This program " & _
        "was designed to run with a screen resolution of 1024 X 768 and may not function properly " & _
        "with your current settings." & vbCrLf & "Would you like to change your screen resolution?"
        MyResponse = MsgBox(MyMessage, vbExclamation + vbYesNo, "Screen Resolution")
    End If
    If MyResponse = vbYes Then
        Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3")
    End If
     
End Sub
 
Laatst bewerkt:
Ik zal het morgen testen op mijn eigen werkbladen.
Bedankt, Michel!

Paul.
 
OctaFish,

Ik heb de procedures in Modules en/of Formulieren geplaatst, maar bij mij
gebeurt er niets

Wat doe ik fout

Offthefield
 
OctaFish ,

Ik heb het nu zover dat er een melding komt als ik het bestand open,
maar als ik vervolgens de formulieren open, gebeurt er niets met de formulieren.

Moet ik deze gegevens soms per formulier invoeren ?

offthefield
 
De code van Octafish werkt bij mij wel.
De eerste en de derde code plaats je in een standaardmodule, de tweede in de 'Thisworkbook'-module.

Als je de x-waarde die je krijgt deelt door de x-waarde van de pc waarop je de applicatie ontwerpt, dan heb je de dblParameter voor de control.width (zie mijn vorige bijdrage).
Als je de y-waarde deelt door de y-waarde van de pc waarop je de applicatie ontwerpt, dan heb je de dblParameter voor de control.height

Het wordt dus:

Code:
    Dim dblParameterW As Double
    Dim dblParameterH As Double
    dblParameterW = x/1920
    dblParameterH = y/1200
    For Each Control In Me.Controls
        Control.Width = Control.Width * dblParameterW
        Control.Height = Control.Height * dblParameterH
        Control.Top = Control.Top * dblParameterH
        Control.Left = Control.Left * dblParameterW
    Next
    Me.Width = Me.Width * dblParameterW
    Me.Height = Me.Height * dblParameterH

Ik zou me niet wagen aan het automatisch wijzigen van de schermresolutie. Slechts weinig mensen zullen dat waarderen.
 
In een topic die 3 jaar geleden al is opgelost, hoef je niet verder te reageren, lijkt mij...
 
Daarom op slot.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan