Afficher les résolutions d'écran disponibles

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 059 fois - Téléchargée 27 fois

Contenu du snippet

Il s'agit d'afficher dans une listbox les différentes résolutions d'écran disponibles, puis de surligner celle en activité. Ce code est un extrait d'un gros programme de jeu (Stunt Car Racer sous DirectX pour PC) que je suis en train d'écrire. Donc volontairement et parce que je n'avais pas besoin de plus d'infos, j'ai décidé de n'afficher que les résolutions sous forme de tailles, en shuntant les taux de rafraichissement et le nb de couleurs disponibles.

Source / Exemple :


Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" _
   (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const DM_WIDTH = &H80000
Private Const DM_HEIGHT = &H100000

Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
     dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * CCHFORMNAME
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type

Private Sub Form_Load()

Form2.Left = (Screen.Width - Form2.Width) / 2
Form2.Top = (Screen.Height - Form2.Height) / 2

'On détermine les mode vidéo disponible avec l'écran
Dim blTMP As Boolean, lgTMP As Long, dmEcran As DEVMODE, res As Long
lgTMP = 0

Do
    blTMP = EnumDisplaySettings(0, lgTMP, dmEcran)
    resol = dmEcran.dmPelsWidth & " x " & dmEcran.dmPelsHeight
    For xx = 0 To List2.ListCount
        ress = List2.List(xx)
        If resol = ress Then
            GoTo 10
        Else
            '
        End If
    Next xx
    List2.AddItem resol
10
    lgTMP = lgTMP + 1
Loop While blTMP <> 0

'On détermine le mode vidéo utilisé
rex = Screen.Width / Screen.TwipsPerPixelX
rey = Screen.Height / Screen.TwipsPerPixelY
resactuelle = Mid$(Str$(rex), 2, Len(Str$(rex)) - 1) + " x " + Mid$(Str$(rey), 2, Len(Str$(rey)) - 1)

'On surligne le mode vidéo utilisé
    For xx = 0 To List2.ListCount
        ress = List2.List(xx)
        If resactuelle = ress Then
            List2.ListIndex = xx
            GoTo 20
        Else
            '
        End If
    Next xx
20

End Sub

Conclusion :


Il suffit d'une petite form, d'une listbox dessus (faites gaffe ici elle est nommé list2 parce que List1 me servait à autrechose)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
6 ans plus tard. . .

<:
Messages postés
12
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
14 janvier 2008

Les GoTo sont hérité de l'époque programmation spaghetti. C'est à proscrire !
C’est vrai que ça marche… mais dans ce cas, pour quoi faire des classes objet quand une classe statique peut suffire ? Si vous ne savez pas… utilisez les GoTo ;)
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
jolie dissertation econs ;)
Messages postés
2
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
19 novembre 2005

Big merci Econs et Alain :)
C'est vrai je suis un peu shadock en programmation, désolé ;)
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
Certes, mais si pour une raison X ou Y, il devait changer le nom du Label de redirection, il faudrait le changer X fois (à chaque GoTo).
Ce qu'il veut faire, c'est juste sortir de la boucle. Avec un Exit For, il sortira toujours de la boucle, sans risque d'être redirigé vers un endroit qui n'existe plus.
Quand on débugge un code, on est amené à changer un tas de chose, à bouger des blocs, et souvent, on ne se rend pas compte de l'impact induit. L'Exit For fera toujours du bon boulot :o)
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.