![]() |
||
![]() |
Formulare für verschiedene Bildschirm-AuflösungenIch 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_CXFULL SCREEN = 16 Private Const SM_CYFULL SCREEN = 17 Public Function getScreenSizeX() As Long getScreenSizeX = GetSystemMetrics (SM_CXFULLSCREEN) End Function Public Function getScreen SizeY() As Long getScreenSizeY = Get SystemMetrics(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 = Bild schirmbreite * TWIPS_PER_PIXEL Bildschirmhoehe = Bild schirmhoehe * TWIPS_PER_PIXEL ‘ Hoehe des Bereiches festlegen Me.Section(acDetail). Height = Bildschirmhoehe - 1000 ‘ Eigenschaften von Liste belegen Liste.Width = Bildschirm breite - (2 * Liste.Left) Liste.Height = Me.Section(acDetail). Height - XAchse.Height - (3 * Liste.Top) Auf der Heft-CD liegen Beispielanwendungen für Access 97 und 2000, in denen Sie die abgedruckten Quelltexte wiederfinden hCHIP-CodeSCRNSIZE. |
![]() |