Changer la résolution d'écran

Résolu
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 5 févr. 2012 à 09:04
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 5 févr. 2012 à 11:09
Bonjour,

Je suis en train de développer un système de diaporama. Pour ce faire, avant le lancement de ce diaporama, je change la résolution d'écran par celle nominale de l'écran. Dans mon 1920*1200.
En principe je n'ai pas de problème.

Sauf que chez un client qui a des problèmes de vision, il travaille en 1152*864 (c'est bâtard mais ça marche sans problème).
Pour mettre dans la résolution standard, je récupère la structure DEVMODE initiale, modifie simplement le Screen.Width et Screen.Height par celles désirées et envoie la fonction ChangeDisplaySettings() avec la flag CD_TEST la 1ère fois pour vérifier si le mode est supporté.

Or cette fonction a un comportement bizarre.

Si la résolution de travail est par exemple de 1280 * 1024 (càd une résolution classique), un changement vers 1920 * 1200 marchera sans problème.

Par contre si la résolution de travail est 1152 * 864 (résolution bâtarde, mais qui marche très bien je le répète), faire une tentative vers 1920 * 1200 renvoie un Mode non Supporté, reste donc en 1152*864 et affiche des photos toutes déformées.

Voici mon code:
Au début du programme je récupère la résolution initiale:

Private p_TScreenResolution As DEVMODE
Private p_ScreenError As Long

Public Function BH_SaveScreenResolution() As Boolean
   p_ScreenError = EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, p_TScreenResolution)
   If p_ScreenError = 0 Then
      p_ScreenError DISP_CHANGE_FAILED:                            BH_SaveScreenResolution False
   Else
      p_ScreenError DISP_CHANGE_SUCCESSFUL:                        BH_SaveScreenResolution True
   End If
End Function


et juste avant le diaporama:
Public Function BH_SetScreenResolution(ByVal Width As Long, ByVal Height As Long) As Long
   Dim TScreenResolution As DEVMODE, lngResult As Long, ScreenInfo As Long
   TScreenResolution p_TScreenResolution:                          TScreenResolution.dmPelsWidth Width:
   TScreenResolution.dmPelsHeight Height:                          TScreenResolution.dmBitsPerPel p_TScreenResolution.dmBitsPerPel
   TScreenResolution.dmDisplayFrequency = p_TScreenResolution.dmDisplayFrequency
   p_ScreenError = ChangeDisplaySettings(TScreenResolution, CDS_TEST)
   If p_ScreenError = DISP_CHANGE_SUCCESSFUL Then
      If ChangeDisplaySettings(TScreenResolution, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL Then
         ScreenInfo = ((Height * 2 ^ 16) + Width)
         Call SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal p_TScreenResolution.dmBitsPerPel, ByVal ScreenInfo)
      End If
   End If
   BH_SetScreenResolution = p_ScreenError
End Function


Dernière précision, j'ai la même chose sur une machine de test où je suis certain que la résolution n'a pas été changé entre la sauvegarde et le changement de résolution.

Si quelqu'un a une idée...
Merci d'avance.

Calade

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 11:05
Je ne saurais essayer avec 1920 * 1200 (le max, est sur mon écran 1440 x 900)
Je n'ai par contre eu aucune difficulté dans le sens aller, de 1280*1024 vers 1440 x 900
Dans le sens retour vers config d'origine , par contre : impossible et pour cause : config anormale qui nécessiterait le redémarrage de la machine (comme dit dans le panneau de config).

Tu vois où mènent certaines "alchimies" ?

Allez ===>> bon dimanche, donc.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 09:09
Bonjour calade,
outre le fait qu'il ne faut jamais toucher à la résolution d'une machine qui n'est pas la tienne (je me mets très en colère si on fait ça sur la mienne et fusille carrément si, en plus, on ne m'en dit rien de manière expresse) :
Il est normal que les images soient déformées lorsque ses proportions ne sont pas gardées.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 févr. 2012 à 09:15
Salut ucFoutu,

Tu peux ranger ta kalach !
Je change la résolution (donc vers 1920 * 1200) de mon client avec son accord et dans le seul but de voir des photos non déformées, et bien entendu je rétabli à SA résolution d'origine (1152 * 864) avant de sortir.


Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 10:03
Ah ...
Si c'était pour si peu ... quel était le besoin d'un code pour faire celà ?
Et si parce-que tu as développé une appli genre album de photographies, ce n'était pas à la résolution, qu'il fallait toucher, mais (en fonction de la résolution de "l'autre", à ta propre appli, par "redimensionnement").
En tout état de cause : te voilà donc avec des images qui n'ont plus les mêmes proportions


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 févr. 2012 à 10:13
On ne se comprends pas, je pense.

Mon client travaille normalement en 1152*864.
Quand il regarde des photos ou des vidéos d'ailleurs (Picasa, Exporer Windows), celles-ci sont toutes déformées.

Quand on change sa résolution via le panneau de config' en 1920*1200 et que l'on relance ce visionnage, les photos/vidéos sont normales.

Dans mon appli, je veux simplement lui éviter d'aller dans le panneau de config à chaque fois. C'est tout. Et je pense que redimensionner mon appli ne changera rien au problème sauf à coder en dur le Screen.Width et Screen.Height de l'écran en 1920*1200 qui me sert à calculer le ratio à appliquer aux photos (celles-ci pouvant être de toutes dimensions, mais de toutes façons plus grandes que l'écran).

Essaie chez toi, tu verras.

Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 10:47
On ne se comprends définitivement pas.
C'est surtout moi, qui ne comprends pas :
d'une part ceci :
Par contre si la résolution de travail est 1152 * 864 (résolution bâtarde, mais qui marche très bien je le répète), faire une tentative vers 1920 * 1200 renvoie un Mode non Supporté, reste donc en 1152*864 et affiche des photos toutes déformées.

et d'autre part cela (maintenant) :
Quand on change sa résolution via le panneau de config' en 1920*1200 et que l'on relance ce visionnage, les photos/vidéos sont normales.

Veux-tu dire que ton code (je n'utiliserais personnellement pas le même) décèle une "impossibilité" non réelle ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 févr. 2012 à 10:52
Exactement,

Via le panneau de config', ces deux résolutions sont tout à fait supportés.

Par contre quand je veux passer de 1152*864 vers 1920*1200 par mon code, j'ai un code de retour de "Mode non Support".

Par contre si je veux passer de 1280*1024 vers 1920*1200 par monde, pas de problème.


Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 févr. 2012 à 11:09
J'ai trouvé,
Dans mon code, je commence par sauvegarder la config d'origine (1152 * 864 en 32 Bits par Pixels et 60 Hz)

Or quand je veux changer, je ne modifie QUE la résolution sans changer la fréquence, or mon écran à cette résolution passe en 75Hz et là ça marche.

Je vais donc être obligé de lister toutes les résolutions acceptées. Je pensais y couper, grosse erreur.


Calade
0
Rejoignez-nous