
@++
Code : Tout sélectionner
FPS = FPS_Counter * 1000 / (ElapsedMilliseconds() - FPS_ElapsedTime)
Code : Tout sélectionner
Strict
Global sph_image:TImage=LoadImage("sph.bmp",DYNAMICIMAGE)
Global pix:TPixmap
'
If sph_image=Null
RuntimeError "image=null"
EndIf
'
Global u,i,x,cmb:Int
'
pix=LockImage(sph_image,0,True,False)
For u=0 To 72
For i=0 To 178
x=ReadPixel(pix,i,u)
'
If x<>-16777216
cmb=cmb+1
EndIf
Next
Next
'
UnlockImage(sph_image,0)
If cmb=8290 Then
Confirm(String.fromlong(cmb)+" = OK ")
Else
Confirm(String.fromlong(cmb)+" = ERREUR ")
EndIf
End
Oui mais pour un SCR ou pour toute autre raison, l'utilisateur n'est pas amené a choisir. Et la resolution du bureau n'est pas toujours executable en openscreen. La question est : que faire ?djes a écrit :Moi j'utilise souvent le petit include fourni dans les exemples de PB ; ça fonctionne très bien et au moins c'est l'utilisateur qui choisit. :/
Bonne idee.zaphod a écrit :Salut tous,
Je me pose des questions sur le bug point.
J'ai fait un equivalent du test de SPH en Blitzmax.
L'exe fait 1313 ko
Il est dispo ici : http://landzone.free.fr/bugpointsph.zip
J'ai testé sur xp et seven 32 bits : j'obtiens 8290 (avec le logo de SPH).
Heink?SPH a écrit :Et la resolution du bureau n'est pas toujours executable en openscreen. La question est : que faire ?
kernadec ne peux pas ouvrir un screen de la resolution de son bureaudjes a écrit :Heink?SPH a écrit :Et la resolution du bureau n'est pas toujours executable en openscreen. La question est : que faire ?
Bin, propose lui un code car moi j'ai renoncé et dobro semble confirmer qu'on ne peux pas ouvrir toutes les resolutions supportées par une machine...djes a écrit :Ben c'est peut-être par rapport à la profondeur... Il a peut-être juste 16 ou 24 bits, et pas 32. Ou alors il a juste assez de mémoire graphique pour un écran, donc il faut lui fermer son bureau avant...
pas du tout !SPH a écrit : dobro semble confirmer qu'on ne peux pas ouvrir toutes les resolutions supportées par une machine...
kernadec : tu as combien de memoire ?
Code : Tout sélectionner
;{- Initialisation
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite3D() = 0
MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou 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 = 1 ; 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
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, "", #PB_Window_ScreenCentered | #PB_Window_Invisible | #PB_Window_Tool)
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
AddGadgetItem(Resolution_Liste, -1, Str(ScreenModeWidth()) + " x " + Str(ScreenModeHeight()) + " / " + Str(ScreenModeRefreshRate()) + "Hz")
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
If OpenScreen(Ecran_Largeur, Ecran_Hauteur, 32, "Ecran", #PB_Screen_WaitSynchronization, Ecran_Frequence) = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 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)
Code : Tout sélectionner
If InitSprite()
If ExamineScreenModes()
While NextScreenMode()
If ScreenModeDepth() = 32
Debug Str(ScreenModeWidth()) + " x " + Str(ScreenModeHeight()) + " " + Str(ScreenModeRefreshRate()) + "Hz"
EndIf
Wend
EndIf
EndIf