Un petit bout de code qui permet d'ouvrir un openscreen dans la résolution du bureau, et si l'ouverture de l'écran échoue, il demande de choisir la résolution.
Vous pouvez également forcer le choix de la résolution en mettant "Resolution_Choisir = 1" à la ligne 8
Je l'avais déjà posté dans un autre sujet, mais j'ai fais quelque petite retouche
http://www.purebasic.fr/french/viewtopi ... ir#p123753
Code : Tout sélectionner
;{- Initialisation des sprites
If InitSprite() = 0 Or InitSprite3D() = 0
MessageRequester("Erreur", "Impossible d'initialiser l'écran. Vérifiez la présence de DirectX 9 ou supérieur.", 0)
End
EndIf
;}
;{- Recerche de la dimension de l'écran à ouvrir
Resolution_Choisir = 0 ; Mettre 0 pour tenter de récupérer la résolution du bureau ou 1 pour toujours choisir manuellement la résolution
If ExamineDesktops() ; On récupère la résolution du bureau
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
Ecran_Frequence = DesktopFrequency(0)
EndIf
Repeat
If Ecran_Largeur = 0 Or Resolution_Choisir ; Ou sinon, on propose une résolution
Resolution_Fenetre = OpenWindow(#PB_Any, 0, 0, 300, 24 * 2 + 8, "Résolution", #PB_Window_ScreenCentered | #PB_Window_Invisible | #PB_Window_Tool | #PB_Window_SystemMenu)
If Resolution_Fenetre
Resolution_Liste = ComboBoxGadget(#PB_Any, 4, 4, WindowWidth(Resolution_Fenetre) - 8, 24)
Resolution_Valider = ButtonGadget(#PB_Any, 4, 4 + 24, WindowWidth(Resolution_Fenetre) - 8, 24, "OK")
; Recerche des résolutions possible
If ExamineScreenModes()
While NextScreenMode()
; On filtre les résolutions :
; uniquement 32bits
; largeur supérieure ou égale à 800 pixels
; fréquence supérieure ou égale à 60Hz et multiple de 5 (pour éviter les fréquences bizarre style 72Hz
If ScreenModeDepth() = 32 And ScreenModeWidth() >= 800 And ScreenModeRefreshRate() >= 60 And ScreenModeRefreshRate() % 5 = 0
Select 100 * ScreenModeWidth() / ScreenModeHeight()
Case 100 * 4 / 3
Resolution_Ratio.s = " / (4:3)"
Case 100 * 16 / 9
Resolution_Ratio.s = " / (16:9)"
Case 100 * 16 / 10
Resolution_Ratio.s = " / (16:10)"
Case 100 * 5 / 3
Resolution_Ratio.s = " / (5:3)"
Case 100 * 5 / 4
Resolution_Ratio.s = " / (5:4)"
Case 100 * 3 / 4
Resolution_Ratio.s = " / (3:4)"
Case 100 * 9 / 16
Resolution_Ratio.s = " / (9:16)"
Case 100 * 10 / 16
Resolution_Ratio.s = " / (10:16)"
Case 100 * 3 / 5
Resolution_Ratio.s = " / (3:5)"
Case 100 * 4 / 5
Resolution_Ratio.s = " / (4:5)"
Case 100
Resolution_Ratio.s = " / (1:1)"
Default
Resolution_Ratio.s = ""
EndSelect
AddGadgetItem(Resolution_Liste, -1, Str(ScreenModeWidth()) + " x " + Str(ScreenModeHeight()) + " / " + Str(ScreenModeRefreshRate()) + "Hz" + Resolution_Ratio)
If ScreenModeWidth() = Ecran_Largeur And ScreenModeHeight() = Ecran_Hauteur And ScreenModeRefreshRate() = Ecran_Frequence ; Si la résolution correspond à celle du bureau, on la sélectionne par défaut
SetGadgetState(Resolution_Liste, CountGadgetItems(Resolution_Liste) - 1)
EndIf
EndIf
Wend
EndIf
If GetGadgetState(Resolution_Liste) = -1 ; Si pas de résolution sélectionnée, on sélectionne la première
SetGadgetState(Resolution_Liste, 0)
EndIf
; Affichage de la fenêtre
StickyWindow(Resolution_Fenetre, 1)
HideWindow(Resolution_Fenetre, 0)
; Boucle d'évènements
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case Resolution_Valider ; on valide
If GetGadgetText(Resolution_Liste) <> "" ; Si on a une sélection
Ecran_Largeur = Val(StringField(GetGadgetText(Resolution_Liste), 1, " "))
Ecran_Hauteur = Val(StringField(GetGadgetText(Resolution_Liste), 3, " "))
Ecran_Frequence = Val(StringField(GetGadgetText(Resolution_Liste), 5, " "))
Resolution_Valider = 0
EndIf
EndSelect
Case #PB_Event_CloseWindow ; si on ferme la fenêtre, on quitte
End
EndSelect
Until Resolution_Valider = 0
Else
End
EndIf
EndIf
;- On ouvre l'openscreen
Ecran_Ouvert = OpenScreen(Ecran_Largeur, Ecran_Hauteur, 32, "Ecran", #PB_Screen_WaitSynchronization, Ecran_Frequence)
If Ecran_Ouvert = 0
CompilerIf #PB_OS_Windows
ShowCursor_(1)
CompilerEndIf
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0)
Resolution_Choisir = 1
EndIf
Until Ecran_Ouvert
;}
;{- Initialisation de la souris et du clavier
If InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialiser la souris ou le clavier. Vérifiez la présence de DirectX 9 ou supérieur.", 0)
End
EndIf
;}
FPS = Ecran_Frequence
Repeat
ClearScreen($000000)
; On lit les évènements clavier et souris
ExamineMouse()
ExamineKeyboard()
; Position de la souris
x = MouseX()
y = MouseY()
If Start3D()
Stop3D()
EndIf
; Calcul du FPS
FPS_Counter + 1
If FPS_Counter >= FPS
FPS = FPS_Counter * 1000 / (ElapsedMilliseconds() - FPS_ElapsedTime)
FPS_Counter = 0
FPS_ElapsedTime = ElapsedMilliseconds()
EndIf
; Affichage du FPS
StartDrawing(ScreenOutput())
DrawText(0, 0, "FPS : " + StrD(FPS, 1) + " ; " + StrD(100 * FPS / Ecran_Frequence, 1) + "%")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)