Einige Office-Anwendungen stellen Ihnen die aktuelle Bildschirmgröße direkt zur Verfügung. So finden Sie beispielsweise in den Eigenschaften HorizontalResolution und VerticalResolution des System-Objekts der Word-Bibliothek die Breite und die Höhe des Bildschirms in Pixels:
Breite = System.HorizontalResolution
Höhe = System.VerticalResolution
Doch in der Access-Bibliothek fehlt diese Möglichkeit. Und in keiner der Bibliotheken der Office-Anwendungen finden Sie eine direkte oder indirekte Möglichkeit, die aktuelle Bildschirmauflösung in Erfahrung zu bringen (die Bildschirmauflösung hängt davon ab, ob der Anwender in den Bildschirmeinstellungen Große oder Kleine Bildschirmschriften oder eine beliebige Schriftgröße eingestellt hat).
Die gesuchten Werte liefert dagegen immer aktuell die API-Funktion GetDeviceCaps. Sie wird für den Gerätekontext (DC) eines bestimmten Geräts aufgerufen, etwa eines Druckers oder eben des Bildschirms. Den Gerätekontext des Bildschirms erhalten Sie über die API-Funktion GetDC, der Sie als Fenster-Handle für den ganzen Bildschirm den Wert 0 übergeben. Nach der Verwendung des Gerätekontextes müssen Sie daran denken, ihn wieder mit der API-Funktion ReleaseDC freizugeben.
Neben dem Gerätekontext übergeben Sie der Funktion GetDeviceCaps einen Index, zu dem Sie den gewünschten Wert erhalten wollen. Zum Beispiel die Bildschirmhöhe und die Bildschirmbreite liefern auf diese Weise die beiden folgenden Hilfsfunktionen ScreenHeightPixels und ScreenWidthPixels:
Private Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" _
(ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Const HORZRES = 8
Private Const VERTRES = 10
Public Property Get ScreenHeightPixels() As Long
Dim nDC As Long
nDC = GetDC(0)
ScreenHeightPixels = GetDeviceCaps(nDC, VERTRES)
ReleaseDC 0, nDC
End Property
Public Property Get ScreenWidthPixels() As Long
Dim nDC As Long
nDC = GetDC(0)
ScreenWidthPixels = GetDeviceCaps(nDC, HORZRES)
ReleaseDC 0, nDC
End Property
Die fehlende Information über die Bildschirmauflösung erhalten Sie über die Funktion GetDeviceCaps. Sie liefert Ihnen direkt die vertikale und die horizontale Bildschirmauflösung in dpi (Dots per Inch):
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Public Property Get dpiX() As Long
Dim nDC As Long
nDC = GetDC(0)
dpiX = GetDeviceCaps(nDC, LOGPIXELSX)
ReleaseDC 0, nDC
End Property
Public Property Get dpiY() As Long
Dim nDC As Long
nDC = GetDC(0)
dpiY = GetDeviceCaps(nDC, LOGPIXELSY)
ReleaseDC 0, nDC
End Property
Scheinbar sind die vertikale und die horizontale Auflösung immer gleich. Doch sollten Sie sich nicht darauf verlassen - es mag durchaus das eine oder andere Bildschirmgerät mit unterschiedlicher horizontaler und vertikaler Auflösung geben.
Aus der Bildschirmauflösung in dpi können Sie zusätzlich noch den vertikalen und den horizontalen Umrechnungsfaktor für die Maßeinheit TWIPS ermitteln. Diese ist ein bei vielen externen Steuerelementen (wie etwa den Microsoft Common Controls) verwendeter Standard für bildschirmbezogene Abmessungen. Diese Maßeinheit errechnet sich als 1440tel der horizontalen bzw. vertikalen Bildschirmauflösung, wie sie von GetDeviceCaps geliefert wird.
Public Property Get TwipsPerPixelX() As Single
Dim nDC As Long
nDC = GetDC(0)
TwipsPerPixelX = 1440 / GetDeviceCaps(nDC, LOGPIXELSX)
ReleaseDC 0, nDC
End Property
Public Property Get TwipsPerPixelY() As Single
Dim nDC As Long
nDC = GetDC(0)
TwipsPerPixelY = 1440 / GetDeviceCaps(nDC, LOGPIXELSY)
ReleaseDC 0, nDC
End Property
Die Bildschirmgröße in TWIPS erhalten Sie dementsprechend über die folgenden Funktionen ScreenWidthTWIPS und ScreenHeightTWIPS:
Public Property Get ScreenHeightTWIPS() As Single
Dim nDC As Long
nDC = GetDC(0)
ScreenHeightTWIPS = GetDeviceCaps(nDC, VERTRES) * _
(1440 / GetDeviceCaps(nDC, LOGPIXELSY))
ReleaseDC 0, nDC
End Property
Public Property Get ScreenWidthTWIPS() As Single
Dim nDC As Long
nDC = GetDC(0)
ScreenWidthTWIPS = GetDeviceCaps(nDC, HORZRES) * _
(1440 / GetDeviceCaps(nDC, LOGPIXELSX))
ReleaseDC 0, nDC
End Property
|