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.