Hallo!
Ich habe in Excel mehrere UserForms.
Bei mir auf dem "Entwicklungs-"Rechner habe ich eine Auflösung von 2560 x 1440.
Wenn ich aber nun meine Excel-Mappe auf nem Laptop mit nur 1024 x 768 px laufen lasse sind die UserForms recht überdimensioniert!
Ich hab jetzt schon nach Umrechnungsmethoden gesucht und bin jetzt dabei das Auflösungs-Verhältnis zu berechnen.
Seitenverhältnis: 1,77777777777778 bei Auflösung von 2560 x 1440
Seitenverhältnis: 1,33333333333333 bei Auflösung von 1024 x 768
Jetzt muss ich irgendwie die Form und jedes Control mit dem Seitenverhältnisfaktor bearbeiten..
..hat da schonmal jemand sowas gemacht?
Ich bediene mich der GetSystemMetrics Funktion aus der user32-Lib um an die aktuelle Auflösung zu kommen.
GetSystemMetrics:
Spoiler anzeigen
Ich habe in Excel mehrere UserForms.
Bei mir auf dem "Entwicklungs-"Rechner habe ich eine Auflösung von 2560 x 1440.
Wenn ich aber nun meine Excel-Mappe auf nem Laptop mit nur 1024 x 768 px laufen lasse sind die UserForms recht überdimensioniert!
Ich hab jetzt schon nach Umrechnungsmethoden gesucht und bin jetzt dabei das Auflösungs-Verhältnis zu berechnen.
Seitenverhältnis: 1,77777777777778 bei Auflösung von 2560 x 1440
Seitenverhältnis: 1,33333333333333 bei Auflösung von 1024 x 768
Jetzt muss ich irgendwie die Form und jedes Control mit dem Seitenverhältnisfaktor bearbeiten..
..hat da schonmal jemand sowas gemacht?
Ich bediene mich der GetSystemMetrics Funktion aus der user32-Lib um an die aktuelle Auflösung zu kommen.
GetSystemMetrics:
Visual Basic-Quellcode
-
- Private Sub testForm()
- Dim FormControl As MSForms.Control
- Dim X_SizeCoefficient As Double
- Dim Y_SizeCoefficient As Double
- '2560 x 1440
- Dim X_Resol_Std As Long '100 % Standard-Auflösung / Horizontal / 2560
- Dim Y_Resol_Std As Long '100 % Standard-Auflösung / Vertikal / 1440
- Dim X_Resol As Long 'ausgelesene Auflösung / Horizontal
- Dim Y_Resol As Long 'ausgelesene Auflösung / Vertikal
- ' X_Resol_Std = 2560
- ' Y_Resol_Std = 1440
- X_Resol_Std = 1024
- Y_Resol_Std = 768
- X_Resol = GetSystemMetrics(SM_CXSCREEN)
- Y_Resol = GetSystemMetrics(SM_CYSCREEN)
- Debug.Print ("Breite: " & X_Resol & " x Höhe: " & Y_Resol)
- Debug.Print ("Seitenverhältnis: " & X_Resol / Y_Resol)
- Debug.Print ("Seitenverhältnis: " & X_Resol_Std / Y_Resol_Std)
- X_SizeCoefficient = X_Resol * 100 / X_Resol_Std
- Y_SizeCoefficient = Y_Resol * 100 / Y_Resol_Std
- Debug.Print (X_SizeCoefficient & " x " & Y_SizeCoefficient)
- ' SizeCoefficient = 1 'inputNumber("Scale Factor: ", "Form", 1)
- '
- '
- ' With Me
- ' .Top = .Top * SizeCoefficient
- ' .Left = .Left * SizeCoefficient
- ' .Width = .Width * SizeCoefficient
- ' .Height = .Height * SizeCoefficient
- ' End With
- ' For Each FormControl In Me.Controls
- ' With FormControl
- ' .Top = .Top * SizeCoefficient
- ' .Left = .Left * SizeCoefficient
- ' .Width = .Width * SizeCoefficient
- ' .Height = .Height * SizeCoefficient
- '
- ' On Error Resume Next
- ' .Font.Size = .Font.Size * SizeCoefficient
- ' On Error GoTo 0
- ' End With
- ' Next FormControl
- End Sub
- Private Function inputNumber(prompt As String, title As String, defValue As Variant) As Variant
- inputNumber = Application.InputBox(prompt, title, defValue, , , , , 1)
- End Function