Display Settings
Verfasst: 20.07.2006 08:53
Hier sind ein paar Prozeduren, mit denen man die aktuellen Bildschirmeinstellungen speichern, abfragen, ändern, überprüfen und zurücksetzen kann.
Das kann z.B. ganz nützlich sein, wenn man sicher stellen will, dass ein Fenster in voller Größe auf dem Bildschirm zu sehen ist.
Beispielsweise könnte ja das Fenster 1024*768 Pixel groß sein, der Bildschirm aber nur 800*600. In diesem Fall könnte dann zuerst die
Größe des Bildschirms ermittelt werden und bei nicht ausreichender Größe angepasst werden.
Hier noch ein Beispielcode, der alle Prozeduren verwendet:
Das kann z.B. ganz nützlich sein, wenn man sicher stellen will, dass ein Fenster in voller Größe auf dem Bildschirm zu sehen ist.
Beispielsweise könnte ja das Fenster 1024*768 Pixel groß sein, der Bildschirm aber nur 800*600. In diesem Fall könnte dann zuerst die
Größe des Bildschirms ermittelt werden und bei nicht ausreichender Größe angepasst werden.
Code: Alles auswählen
Global OldSettings.DEVMODE,NewSettings.DEVMODE,CurrentSettings.DEVMODE,Checked
Procedure GetOldDisplaySettings() ;Prozedur zum Speichern der alten Displayeinstellungen
If Checked=#False
EnumDisplaySettings_(0,-1,@OldSettings.DEVMODE) ;Speichert die aktuellen Einstellungen in OldSettings.DEVMODE
Checked=#True
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure ChangeDisplay(NewDepth,NewWidth,NewHeight,NewFrequency) ;Prozedur zum Ändern der aktuellen Displayeinstellungen
EnumDisplaySettings_(0,-1,@NewSettings.DEVMODE) ;Alte Einstellungen in NewSettings.DEVMODE speichern...
;...und neu anpassen:
NewSettings\dmBitsPerPel = NewDepth ;Neue Tiefe in Bits pro Pixel
NewSettings\dmPelsWidth = NewWidth ;Neue Breite in Pixel
NewSettings\dmPelsHeight = NewHeight ;Neue Höhe in Pixel
NewSettings\dmDisplayFrequency = NewFrequency ;Neue Bildschirmfrequenz in Hertz
Changed=ChangeDisplaySettings_(@NewSettings,0) ;Neue Einstellungen übernehmen
If Changed=#DISP_CHANGE_SUCCESSFUL
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure VerifyDisplaySettings(QueryDepth,QueryWidth,QueryHeight,QueryFrequency) ;Prozedur die überprüft, ob die "Query"-Werte vorliegen
Protected CurrentSettings.DEVMODE
EnumDisplaySettings_(0,-1,@CurrentSettings.DEVMODE) ;Aktuelle Einstellungen speichern...
QDepth = CurrentSettings\dmBitsPerPel
QWidth = CurrentSettings\dmPelsWidth
QHeight = CurrentSettings\dmPelsHeight
QFrequency = CurrentSettings\dmDisplayFrequency
If QDepth<>QueryDepth Or QWidth<>QueryWidth Or QHeight<>QueryHeight Or QFrequency<>QueryFrequency ;...und überprüfen...
Result=#False ;...Die zu überprüfenden Werte liegen nicht vor
Else
Result=#True ;...Die zu überprüfenden Werte liegen vor
EndIf
ProcedureReturn Result
EndProcedure
Procedure GetCurrentSettings(*Pointer_to_a_DEVMODE_structured_Variable.DEVMODE) ;Prozedur zum Abfragen der aktuellen Werte
;Beispiel:Aufruf der Prozedur GetCurrentSettings(@MySettings.DEVMODE) speichert die Werte in MySettings.DEVMODE.
;Einfach mit der Zielvariable mit einem @ davor aufrufen.
EnumDisplaySettings_(0,-1,*Pointer_to_a_DEVMODE_structured_Variable) ;Speichert die aktuellen Einstellungen in CurrentSettings.DEVMODE
EndProcedure
Procedure SetOldDisplaySettings() ;Prozedur zum Wiederherstellen der alten Displayeinstellungen
If Checked=#True
Changed=ChangeDisplay(OldSettings\dmBitsPerPel,OldSettings\dmPelsWidth,OldSettings\dmPelsHeight,OldSettings\dmDisplayFrequency)
ProcedureReturn Changed
Else
ProcedureReturn #False
EndIf
EndProcedure
Code: Alles auswählen
;BEISPIELCODE: unter Verwendung aller Procedures
GetOldDisplaySettings() ;Muss am Anfang des Programms stehen
;Beliebiger Programmcode:
GetCurrentSettings(@Settings.DEVMODE) ;aktuelle Werte erhalten...
Debug "Alte Einstellungen:" ;und ausgeben:
Debug "-Bits pro Pixel: "+Str(Settings\dmBitsPerPel)
Debug "-Breite in Pixel: "+Str(Settings\dmPelsWidth)
Debug "-Höhe in Pixel :"+Str(Settings\dmPelsHeight)
Debug "-Frequenz in Hertz:"+Str(Settings\dmDisplayFrequency)
If VerifyDisplaySettings(Settings\dmBitsPerPel,Settings\dmPelsWidth,Settings\dmPelsHeight,Settings\dmDisplayFrequency) ;Muss 1 ergeben, da die zu prüfenden Werte ja gerade vorliegen, ist hier also total überflüssig.
ChangeDisplay(16,800,600,60) ;Beispiel: 800 X 600 Pixel bei 16 Bits/Pixel und einer Bildwiederholfrequenz von 60 Hz
GetCurrentSettings(@Settings.DEVMODE)
Debug "Neue Einstellungen:"
Debug "-Bits pro Pixel: "+Str(Settings\dmBitsPerPel)
Debug "-Breite in Pixel: "+Str(Settings\dmPelsWidth)
Debug "-Höhe in Pixel :"+Str(Settings\dmPelsHeight)
Debug "-Frequenz in Hertz:"+Str(Settings\dmDisplayFrequency)
Delay(20000)
EndIf
;Ende des Programms:
SetOldDisplaySettings() ;Hebt am Ende des Programms die Änderungen wieder auf.