Auflösung ändern

Hallo Leute.

Hat irgendwer eine Ahnung, ob man unter Access mit VBA-Code die Bildschirmauflösung ändern kann.
Falls dies funktioniert, wie?

mfg, Fred

Hi

Meines Wissens nach kannst Du sie lediglich auslesen, nicht aber ändern.
Ist aber auch gut so, denn Du kannst ja nicht wissen, ob der Bildschirm und die Grafikkarte die neue Auflösung mitmachen. Wäre ziemlich benutzerunfreundlich, die Auflösung automatisch umzustellen.

Die gute Lösung ist, die Auflösung auszulesen und Deine Dialoge entsprechend anzupassen.

Greetz Sherman

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fred!

Hat irgendwer eine Ahnung, ob man unter Access mit VBA-Code
die Bildschirmauflösung ändern kann.

Ja.

Falls dies funktioniert, wie?

funktioniert hat’s grundsätzlich, war allerdings von gelegentlichen Abstürzen gesegnet (den Grund hab ich nicht gefunden) - darum hab ich’s wieder ausgebaut:

Private Declare Function GetDeviceCaps Lib „gdi32“ (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDesktopWindow Lib „user32“ () As Long
Private Declare Function GetDC Lib „user32“ (ByVal hwnd As Long) As Long

Private Const HORZRES = 8
Private Const VERTRES = 10
Private Const BITSPIXEL = 12
Private Const FREQU = 116

Private Sub Form_Load()
Dim sHor, sVer, sPix, sFreq As Integer
Dim db As Database

'Backup der aktuellen Auflösung
Set db = CurrentDb
sHor = GetDeviceCaps(GetDC(GetDesktopWindow), HORZRES)
sVer = GetDeviceCaps(GetDC(GetDesktopWindow), VERTRES)
sPix = GetDeviceCaps(GetDC(GetDesktopWindow), BITSPIXEL)
sFreq = GetDeviceCaps(GetDC(GetDesktopWindow), FREQU)
db.Execute („UPDATE tblAufloesung SET height=“ & sVer & „, width=“ & sHor & „,color=“ & sPix & „,frequenzy=“ & sFreq & " WHERE ID = 1")
Set db = Nothing
'Ändern der Auflösung
Call ChangeScreenSettings(800, 600, 16, 75)
End Sub

'Modul für die Screen-Funktion:

Option Compare Database
Option Explicit

Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32

Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Const DISP_CHANGE_FAILED = -1
Private Const DISP_CHANGE_BADMODE = -2
Private Const DISP_CHANGE_NOTUPDATED = -3
Private Const DISP_CHANGE_BADFLAGS = -4
Private Const DISP_CHANGE_BADPARAM = -5

Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H2

Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000

Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Private Declare Function EnumDisplaySettings Lib „user32“ Alias „EnumDisplaySettingsA“ (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib „user32“ Alias „ChangeDisplaySettingsA“ (lpDevMode As Any, ByVal dwflags As Long) As Long

Function ChangeScreenSettings(lWidth As Integer, lHeight As Integer, lColors As Integer, lDisplayFrequency As Integer)
Dim tDevMode As DEVMODE, lTemp As Long, lIndex As Long
’ Declare variables
lIndex = 0
Do
'Instilise Do loop
lTemp = EnumDisplaySettings(0&, lIndex, tDevMode)
’ Call the APi function
If lTemp = 0 Then Exit Do
’ If there is no more data or an erro occurs
’ then return 0 and exit do
lIndex = lIndex + 1
’ Increase the index to be enumerated
With tDevMode
If .dmPelsWidth = lWidth And .dmPelsHeight = lHeight And .dmBitsPerPel = lColors And .dmDisplayFrequency = lDisplayFrequency Then
lTemp = ChangeDisplaySettings(tDevMode, CDS_UPDATEREGISTRY)
Exit Do
End If
End With
’ Set the new data
’ Change the display type. This depends on the paramter used
’ It can either be:
’ 0 - Dynamic change if possible
’ CDS_UPDATEREGISTRY - Dynamically change if possible
’ and if not possibel then update registry for change
’ on the next boot-up
’ CDS_TEST - Test the new settings
Loop
Select Case lTemp
’ Check for errors
Case DISP_CHANGE_SUCCESSFUL
’ MsgBox „The display settings change was successful“, vbInformation
Case DISP_CHANGE_RESTART
MsgBox „The computer must be restarted in order for the graphics mode to work“, vbQuestion
Case DISP_CHANGE_FAILED
MsgBox „The display driver failed the specified graphics mode“, vbCritical
Case DISP_CHANGE_BADMODE
MsgBox „The graphics mode is not supported“, vbCritical
Case DISP_CHANGE_NOTUPDATED
MsgBox „Unable to write settings to the registry“, vbCritical
’ NB. Windows NT Only
Case DISP_CHANGE_BADFLAGS
MsgBox „An invalid set of flags was passed in“, vbCritical
End Select
End Function

Grüße,
JJLehto