Ouverture d'openscreen

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Ouverture d'openscreen

Message par Le Soldat Inconnu »

Salut,

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)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Ouverture d'openscreen

Message par Ar-S »

Il manque pas un truc ici ?

Code : Tout sélectionner

If Ecran_Largeur = 0 Or Resolution_Choisir ;
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ouverture d'openscreen

Message par Le Soldat Inconnu »

pourquoi ?

si l'examen du bureau échoue (examinedesktop), la largeur de l'écran sera de 0. (comment ça j'ai l'esprit tordu ?)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre