Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Gillou
Messages : 373 Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :
Message
par Gillou » sam. 12/nov./2005 16:13
Bonjour, tout le monde
J'ai commencé à faire un code pour modifier la résolution d'écran, mais malheureusement, il n'y a rien qui se passe.
Avez-vous une idée?
;lien pour les constantes dm_* : http://oem.zeno.com/public/?SDK/0_Super ... nts/dm.htm
#CDS_UPDATEREGISTRY =$1
#CDS_TEST =$2
#CDS_FULLSCREEN =$4
#CDS_GLOBAL =$8
#CDS_SET_PRIMARY =$10
#CDS_RESET =$40000000
#CDS_SETRECT =$20000000
#CDS_NORESET =$10000000
#DISP_CHANGE_SUCCESSFUL =0
#DISP_CHANGE_RESTART =1
#DISP_CHANGE_FAILED =
-1
#DISP_CHANGE_BADMODE =-2
#DISP_CHANGE_NOTUPDATED =-3
#DISP_CHANGE_BADFLAGS =-4
#DISP_CHANGE_BADPARAM =-5
#DM_BITSPERPEL =$40000
#DM_PELSWIDTH =$80000
#DM_PELSHEIGHT =$100000
#DM_DISPLAYFREQUENCY =$400000
;ExamineDesktops()
;DD = DesktopDepth(0)
;DH = DesktopHeight(0)
;DW = DesktopWidth(0)
Procedure SetResolution(RezX,RezY,NbCoul,Frequence,Memoriser)
; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...
If EnumDisplaySettings_(0,
-1 ,dmEcran.DEVMODE)
If RezX=dmEcran\dmPelsWidth
And RezY=dmEcran\dmPelsHeight
And NbCoul=dmEcran\dmBitsPerPel
And Frequency=dmEcran\dmDisplayFrequency:
ProcedureReturn 2:
EndIf
dmEcran\dmFields=
#DM_PELSWIDTH |
#DM_PELSHEIGHT |
#DM_BITSPERPEL |
#DM_DISPLAYFREQUENCY
dmEcran\dmPelsWidth=RezX
dmEcran\dmPelsHeight=RezY
dmEcran\dmBitsPerPel=NbCoul
dmEcran\dmDisplayFrequency=Frequence
If Memoriser=1:Memoriser=#CDS_UPDATEREGISTRY|
#CDS_NORESET :
Else :Memoriser=#CDS_TEST|
#CDS_NORESET :
EndIf
dmx=ChangeDisplaySettings_(dmEcran,Memoriser)
;SendMessage_(65535, 27, 0, 0)
;SendMessage_($FFFF, $7E, NbCoul, RezY * Pow(2,16) + RezX)
ProcedureReturn dmx
Else
ProcedureReturn 1
EndIf
EndProcedure
SetResolution(1920,1200,16,60,1)
Droopy
Messages : 1151 Inscription : lun. 19/juil./2004 22:31
Message
par Droopy » sam. 12/nov./2005 16:55
j'ai trouvé ça sur le forum Allemand
Code : Tout sélectionner
;/ Author : DarkDragon
dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(dmScreenSettings)
dmScreenSettings\dmPelsWidth = 1024 ;Bildschirmbreite
dmScreenSettings\dmPelsHeight = 768 ;Bildschirmhöhe
dmScreenSettings\dmBitsPerPel = 16 ;Bildschirmtiefe
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
ChangeDisplaySettings_(@dmScreenSettings, 4) ;<> 0 ;Wenn etwas schief geht...
MessageRequester("Changement de résolution","OK pour restaurer mode")
Gillou
Messages : 373 Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :
Message
par Gillou » sam. 12/nov./2005 17:19
Merci Droopy
Mon code corrigé,
#CDS_UPDATEREGISTRY = $1
#CDS_TEST = $2
#CDS_FULLSCREEN = $4
#CDS_GLOBAL = $8
#CDS_SET_PRIMARY = $10
#CDS_RESET = $40000000
#CDS_SETRECT = $20000000
#CDS_NORESET = $10000000
#DISP_CHANGE_SUCCESSFUL = 0
#DISP_CHANGE_RESTART = 1
#DISP_CHANGE_FAILED = -1
#DISP_CHANGE_BADMODE = -2
#DISP_CHANGE_NOTUPDATED = -3
#DISP_CHANGE_BADFLAGS = -4
#DISP_CHANGE_BADPARAM = -5
#DM_BITSPERPEL = $40000
#DM_PELSWIDTH = $80000
#DM_PELSHEIGHT = $100000
#DM_DISPLAYFREQUENCY = $400000
Procedure SetResolution(RezX, RezY, NbCoul, Frequence, Memoriser) ; si SetResolution=2 la résolution est identique à l'actuelle, si 1 erreur lors de la recherche des infos, sinon regarder #DISP_CHANG_...
dm.DEVMODE
If EnumDisplaySettings_ (0, -1, @dm)
If RezX = dm\dmPelsWidth And RezY = dm\dmPelsHeight And NbCoul = dm\dmBitsPerPel And Frequence=dm\dmDisplayFrequency : ProcedureReturn 2 : EndIf
dmEcran.DEVMODE
dmEcran\dmSize = SizeOf(dmEcran)
dmEcran\dmFields = #DM_PELSWIDTH|#DM_PELSHEIGHT|#DM_BITSPERPEL|#DM_DISPLAYFREQUENCY
dmEcran\dmPelsWidth = RezX
dmEcran\dmPelsHeight = RezY
dmEcran\dmBitsPerPel = NbCoul
dmEcran\dmDisplayFrequency = Frequence
If Memoriser=1 : Memoriser= #CDS_UPDATEREGISTRY Or #CDS_NORESET : Else : Memoriser= #CDS_FULLSCREEN : EndIf
dmx = ChangeDisplaySettings_ (@dmEcran,Memoriser)
ProcedureReturn dmx
Else
ProcedureReturn 1
EndIf
EndProcedure
Debug SetResolution(1920,1200,16,60,1)
Gillou
Messages : 373 Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :
Message
par Gillou » sam. 12/nov./2005 17:47
Tiens Droopy pour enumérer les résolutions standards
Procedure EnumDisplay()
a=1
While a
a=EnumDisplaySettings_(0,b,dmEcran.DEVMODE)
b=b+1
Debug Str (dmEcran\dmPelsWidth)+" x "+ Str (dmEcran\dmPelsHeight)+" x "+ Str (dmEcran\dmBitsPerPel)
Wend
EndProcedure
EnumDisplay()
Droopy
Messages : 1151 Inscription : lun. 19/juil./2004 22:31
Message
par Droopy » sam. 12/nov./2005 19:45
merci, il manquait juste la fréquence
Code : Tout sélectionner
Procedure EnumDisplay()
a=1
While a
a=EnumDisplaySettings_(0,b,dmEcran.DEVMODE)
b=b+1
Debug Str (dmEcran\dmPelsWidth)+" x "+ Str (dmEcran\dmPelsHeight)+" x "+ Str (dmEcran\dmBitsPerPel) + " @ "+Str(dmEcran\dmDisplayFrequency)
Wend
EndProcedure
EnumDisplay()
Gillou
Messages : 373 Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :
Message
par Gillou » sam. 12/nov./2005 19:51
Exact, maintenant c'est nickel
NY152
Messages : 148 Inscription : dim. 14/mai/2006 20:41
Message
par NY152 » lun. 11/juil./2016 21:11
Comment déclare-t-on dm.DEVMODE ?
J'essais de toujours travailler en EnableExplicit, c'est plus pro, c'est plus propre ^^
.:NY152:.
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » lun. 11/juil./2016 22:27
NY152 a écrit : Comment déclare-t-on dm.DEVMODE ?
avec Global ou Protected non ?
je ne sais pas si je comprends bien le sens de ta question. Au cas ou, un petit code pris sur le forum anglophone.
http://forum.purebasic.com/english/view ... 90#p451810
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Zorro
Messages : 2186 Inscription : mar. 31/mai/2016 9:06
Message
par Zorro » mar. 12/juil./2016 8:25
voici le code que j'utilise, et qui fonctionne depuis toujours
Code : Tout sélectionner
Declare setresolution(width, height, depth, flag=#cds_fullscreen)
ExamineDesktops()
; recup la resolution actuel
reso_x=DesktopWidth(0)
reso_y=DesktopHeight(0)
SetResolution(800, 600, 16) ; change la resolution en 800x600 16 bits
Delay(3000)
SetResolution(reso_x, reso_y, 32) ; remet la resolution de depart
Procedure SetResolution(Width, Height, Depth, Flag=#CDS_FULLSCREEN)
Protected Result, dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = Width
dmScreenSettings\dmPelsHeight = Height
dmScreenSettings\dmBitsPerPel = Depth
dmScreenSettings\dmFields = #DM_PELSWIDTH | #DM_PELSHEIGHT | #DM_BITSPERPEL
If ChangeDisplaySettings_(@dmScreenSettings, Flag) = #DISP_CHANGE_SUCCESSFUL
Result = #True
EndIf
ProcedureReturn Result
EndProcedure
@Falsam
ton code concerne la capture d'ecran
ici le sujet c'est le changement de resolution de l'ecran