Formulare für verschiedene Bildschirm-Auflösungen

Ich habe ein Access-Formular mit einer Bildschirmauflösung von 800 x 600 Punkten entworfen. Wird das Formular aber auf einem Monitor mit höherer Auflösung geöffnet, so klebt es in der linken, oberen Ecke. Die mühsam entworfene Formatierung ist damit völlig nutzlos. Wie kann ich ein Formular automatisch an die jeweilige Bildschirmauflösung anpassen?

Mit etwas Programmierarbeit ist das kein Problem. Bestimmen Sie zuerst die aktuelle Bildschirmauflösung, um dann einige Eigenschaften aller Formularobjekte entsprechend neu zu belegen. Erzeugen Sie in Ihrer Datenbank ein neues Modul beliebigen Namens und belegen Sie es mit dem folgenden VBA-Code:


Option Compare Database
Option Explicit

Private Declare Function GetSystemMetrics Lib äUser32ô (ByVal nIndex As
Long) As Long

Private Const SM_CXFULLSCREEN = 16
Private Const SM_CYFULLSCREEN = 17

Public Function getScreenSizeX() As Long
getScreenSizeX = GetSystemMetrics(SM_CXFULLSCREEN)
End Function

Public Function getScreenSizeY() As Long
getScreenSizeY = GetSystemMetrics(SM_CYFULLSCREEN)
End Function



Und so funktioniert das Skript: Mit der Anweisung »Declare Function« verweisen Sie auf die externe Prozedur »GetSystemMetrics()« aus der Programmbibliothek USER32.DLL, mit der Sie über die Abfragen »getScreen-SizeX()« und »getScreenSizeY()« die horizontale und vertikale Bildschirmauflösung in Pixel bestimmen. Dabei berücksichtigt Access bereits Objekte, die die zur Verfügung stehende Fläche reduzieren, wie zum Beispiel die Startleiste. Dadurch ist die ermittelte Auflösung etwas geringer als erwartet.

Access arbeitet intern mit der geräteunabhängigen Maßeinheit Twip, so dass alle Angaben in diese Einheit umzurechnen sind. Laut einschlägiger Literatur entspricht ein Pixel je nach Bildschirmtreiber zwischen 12 und 15 Twips. Am besten Sie benutzen zur Umrechnung den Faktor 15 und hinterlegen ihn in der Konstante »TWIPS_ PER_PIXEL«, die Sie im Code des Formulars mit »Private Const« definieren.

Nun müssen Sie verschiedene Eigenschaften der Formularobjekte in der VBA-Prozedur »Form_Open()« neu belegen, die dem Formular-Ereignis »Beim Öffnen« hinterlegt ist. Formularobjekte verfügen meist über vier relevante Eigenschaften. »Left« und »Top« geben den Abstand eines Objektes zum linken und oberen Rand des Bereichs an und definieren auf diese Art seine Position auf dem Formular. Mit »Height« und »Width« bestimmen Sie Höhe und Breite eines Objektes. Zusätzlich ist es eventuell notwendig, die Eigenschaften »Width« des Formulars und »Height« des betroffenen Formularbereichs anzupassen.

Im Beispiel sehen Sie eine mögliche Manipulation an einem Textfeld namens »Liste« und dem Detailbereich »Me.Section(acDetail)«.



Dim Bildschirmbreite As Long
Dim Bildschirmhoehe As Long

æ Gesamten Bildschirm nutzen
DoCmd.Maximize

æ Aufloesung in Pixel ermitteln
Bildschirmbreite = getScreenSizeX()
Bildschirmhoehe = getScreenSizeY()

æ Umrechnung der Pixel in Twips
Bildschirmbreite = Bildschirmbreite * TWIPS_PER_PIXEL
Bildschirmhoehe = Bildschirmhoehe * TWIPS_PER_PIXEL

æ Hoehe des Bereiches festlegen
Me.Section(acDetail).Height = Bildschirmhoehe - 1000

æ Eigenschaften von Liste belegen
Liste.Width = Bildschirmbreite - (2 * Liste.Left)
Liste.Height = Me.Section(acDetail).Height - XAchse.Height - (3 * Liste.Top)