Bonjour DBX,
Je ne te conseille pas trop de jouer avec la résolution d'écran des Utilisateurs de tes applis. Imagine si tous les site Web s'amusaient à faire çà !
Ceci dit le Grand Chef à Trois Plumes, nous avait pondu ceci à l'époque ou on travaillait avec des résolutions beaucoup plus basses (640 x 480 sur 256 couleurs)... Je viens de faire tourner sous WinMe çà tourne encore.
Voici l'intégralité du Post de Laurent (MPFE 2000/05/31)
Rien de tel qu'une jolie compote d'API pour bien digérer le repas de
midi (burps!)
J'ai testé sur deux bécanes complètement différentes (Win95 et 98), ça a
l'air de bien marcher. Fais-moi signe s'il y a un problème.
La fonction ChangeRes(HorzPix[, NbCouleurs]) change la résolution en
fonction de la largeur demandée en pixels (paramètre HorzPix, par
exemple 800 ou 1024) et du nombre de couleurs (256 par défaut). Si le
mode d'affichage a été modifié sans rebooter Windows, elle renvoie 0,
s'il faut rebooter elle renvoie 1, et sinon -1 ou -2 selon l'erreur
rencontrée.
Bonne chance,
Laurent
'===================================================
Type TDEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function EnumDisplaySettingsA Lib "User32" _
(ByVal lpszDeviceName As String, ByVal iModeNum As Long, _
lpDevMode As TDEVMODE) As Long
Private Declare Function ChangeDisplaySettingsA Lib "User32" _
(lpDevMode As TDEVMODE, ByVal dwflags As Long) As Long
Private Declare Function GetDC Lib "User32" _
(ByVal hWnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "Gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "User32" _
(ByVal hWnd As Long, ByVal hdc As Long) As Long
Function ChangeRes(HorzPix As Integer, _
Optional NbCouleurs) As Integer
Dim DevMode As TDEVMODE, I As Long
Dim BitsPerPel As Integer, DC As Long
Dim ActHorzPix As Integer, ActBitsPerPel As Integer
DC = GetDC(0)
If IsMissing(NbCouleurs) Then BitsPerPel = 8 _
Else BitsPerPel = Log(NbCouleurs) / Log(2)
ActHorzPix = GetDeviceCaps(DC, 8)
ActBitsPerPel = GetDeviceCaps(DC, 12)
ReleaseDC 0, DC
If ActHorzPix = HorzPix And ActBitsPerPel = BitsPerPel _
Then Exit Function
Do
If EnumDisplaySettingsA(vbNullString, I, DevMode) = 0 _
Then ChangeRes = -2: Exit Function
I = I + 1
Loop Until DevMode.dmPelsWidth = HorzPix _
And DevMode.dmBitsPerPel = BitsPerPel
ChangeRes = ChangeDisplaySettingsA(DevMode, 0)
End Function
Sub Test()
' Passe en résolution 640 x 480 et 256 couleurs
Select Case ChangeRes(640, 256)
Case 0
MsgBox "Résolution modifiée."
Case 1
MsgBox "Vous devez redémarrer votre ordinateur " _
& "pour que les changements prennent effet."
Case -2
MsgBox "Résolution et / ou nombre de couleurs non supporté."
Case -1
MsgBox "Impossible de changer de résolution."
End Select
End Sub
'===================================================
Ceci dit si tu veux éviter de passer en 256 couleurs, mais plutot en 16 Bits tu indiqueras => dans la Macro Test : Select Case ChangeRes(1024, 65536) et en 32 bits = (1024, 4294967296)
Bon Courage, mais surtout ne jamais lancer de ce genre de macro dans le Workbook_Open sans en avertir l'utilisateur.
Ah oui j'ai aussi trouvé une page du Site de Laurent où il explique aussi lui-même plus de détails...
<http://longre.free.fr/pages/api/resolution.htm>
Bon Week End
@+Thierry