Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1612to1616
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform Zoom

Userform Zoom
13.03.2018 19:13:45
Rudi
Hallo Herber-Forum,
als Neuling möchte ich erst einmal ein dickes Lob an Herrn Herber und die hilfsbereiten User hier loswerden. Als Trial & Error-Bastler im VBA-Bereich habe ich hier schon den ein oder anderen Kniff für meine Zwecke "umbiegen" können.
Danke an der Stelle schon mal dafür!
Nun habe ich ein "nice to have"-Anliegen:
Kann man in einer Userform festlegen, welche Elemente gezoomt werden?
D.h. könnte man zum Beispiel bestimmte Command-Buttons bei fixer Größe belassen, während der Gesamt-Zoom den Rest entsprechend verkleinert oder vergrößert?
Natürlich könnte man das mit gewissen mathematischen Relationen in Abhängigkeit des Zoomfaktors und Button-Größen auch bauen, die Frage ist aber, ob es eine einfache Systemlösung gibt mit der man das Ziel erreichen kann.
Für Infos vielen Dank im Voraus!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Zoom
13.03.2018 23:52:15
Steve
Bau dir doch ne zweite UF, die so ist, wie sie nach dem Zoom sein soll und lass sie durch einen Button "Zoom" die kleinere UF ersetzen
AW: Userform Zoom
14.03.2018 08:22:12
Peter(silie)
Hallo,
was genau verstehst du unter Zoom?
Meinst du damit dass die UserForm größe sich der Bildschirmgröße anpasst?
Du kannst mit einer For Each Schleife durch die Controls der UF Loopen und prüfen ob das
momentane Objekt ein CommandButton ist oder ein Label oder was auch immer.
AW: Userform Zoom
14.03.2018 12:48:56
Rudi
Danke Dir (und auch Steve) für die Vorschläge.
Ja, unter "Zoom" meine ich die gesamte Userform.
Kurzer Hintergrund:
Die Userform füllt den ganzen Bildschirm aus.
Die Anwendung verwende ich sowohl an einem 27"-Touchpanel, 12" Surface und einem 8"-Win 10 Tablet.
Für die unterschiedlichen Auflösungen und Sreenformate nutze ich in Abhängigkeit des Computernamens (Environ...) unterschiedliche Zoom-Faktoren und .width und .height Werte.
Das Problem ist, dass bei einem Zoom-Faktor von 40% einige Elemente in der UF sehr klein dargestellt sind, daher die Eingangsfrage.
Habe jetzt einen relativ einfachen Lösungsansatz gefunden:
Habe alle Buttons und Images (welche nicht "gezoomt" werden sollen) in ein Frame gelegt, diesen kann ich innerhalb der UF unabhängig Zoomen bzw. Vergrößern.
Anzeige
AW: Userform Zoom
14.03.2018 16:56:57
Peter(silie)
Hallo,
unten Code und eine Beispiele Mappe die dir Vielleicht helfen könnten.
Verwendet Windows API Funktionen um die Userform und die Control größen zu ändern.
Hier Mappe: https://www.herber.de/bbs/user/120419.xlsm
Hier Code der UserForm:

Private Sub UserForm_Activate()
ScaleControls
End Sub
Private Sub ScaleControls()
Dim w   As Long
Dim h   As Long
Dim ppi As Double
Dim ct  As Control
w = ZoomHandler.GetSystemWidth
'Falls die Breite kleiner 1920 ist
'Ich gehe mal davon aus dass der Hauptbildschirm 1920x1080 hat
'Die anderen somit kleiner sind und die UF kleiner dargestellt werden sollte
If w  "CommandButton" Then
'füge am Ende * 0.9 hinzu, wenns sie noch kleiner seien sollen
'Breite
ct.Width = ct.Width * ppi
'Höhe
ct.Height = ct.Height * ppi
'Position Links
ct.Left = ct.Left * ppi
'Position Oben
ct.Top = ct.Top * ppi
'Schriftgröße
ct.Font.Size = CLng(ct.Font.Size * ppi)
End If
Next ct
End If
End Sub

Hier Code des Moduls "ZoomHandler":
Option Explicit
#If VBA7 Then
#If Win64 Then
Private Declare PtrSafe Function GetSystemMetrics32 _
Lib "user32.dll" Alias "GetSystemMetrics" _
(ByVal nIndex As Long) _
As Long
Private Declare PtrSafe Function GetDeviceCaps _
Lib "gdi32.dll" _
(ByVal hDC As LongPtr, _
ByVal nIndex As Long) _
As Long
Private Declare PtrSafe Function GetDC _
Lib "user32.dll" _
(ByVal hWnd As LongPtr) _
As LongPtr
Private Declare PtrSafe Function ReleaseDC _
Lib "user32.dll" _
(ByVal hWnd As LongPtr, _
ByVal hDC As LongPtr) _
As Long
#Else
Private Declare Function GetSystemMetrics32 _
Lib "user32.dll" Alias "GetSystemMetrics" _
(ByVal nIndex As Long) _
As Long
Private Declare Function GetDeviceCaps _
Lib "gdi32.dll" _
(ByVal hDC As Long, _
ByVal nIndex As Long) _
As Long
Private Declare Function GetDC _
Lib "user32.dll" _
(ByVal hWnd As Long) _
As Long
Private Declare Function ReleaseDC _
Lib "user32.dll" _
(ByVal hWnd As Long, _
ByVal hDC As Long) _
As Long
#End If
#Else
Private Declare Function GetSystemMetrics32 _
Lib "user32.dll" Alias "GetSystemMetrics" _
(ByVal nIndex As Long) _
As Long
Private Declare Function GetDeviceCaps _
Lib "gdi32.dll" _
(ByVal hDC As Long, _
ByVal nIndex As Long) _
As Long
Private Declare Function GetDC _
Lib "user32.dll" _
(ByVal hWnd As Long) _
As Long
Private Declare Function ReleaseDC _
Lib "user32.dll" _
(ByVal hWnd As Long, _
ByVal hDC As Long) _
As Long
#End If
'returns the value of the Points per pixel of the current screen
Public Function PointsPerPixel() As Double
Dim hDC             As Long
Dim lDotsPerInch    As Long
Const LOGPIXELSX        As Long = 88
Const POINTS_PER_INCH   As Long = 72
hDC = GetDC(0)
lDotsPerInch = GetDeviceCaps(hDC, LOGPIXELSX)
PointsPerPixel = POINTS_PER_INCH / lDotsPerInch
ReleaseDC 0, hDC
End Function
'returns the width of the current screen
Public Function GetSystemWidth() As Long
GetSystemWidth = GetSystemMetrics32(0)
End Function
'returns the height of the current screen
Public Function GetSystemHeight() As Long
GetSystemHeight = GetSystemMetrics32(1)
End Function

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige