OVH Cloud OVH Cloud

Résolution d'écran

6 réponses
Avatar
probsim
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la résolution de l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de ce forum
avait soumis il y a quelque temps en réponse à un problème similaire au mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des zéros.

Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As Long) As
Long
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (lpszDeviceName As Any, ByVal iModeNum As Long,
lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As Double



et ensuite j'ai défini la macro suivante afin de récupérer les paramètres de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux difficilement
me dépanner puisque tout ce code est aussi clair pour moi qu'une prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur la bonne façon
de faire les choses.

merci

Guy

6 réponses

Avatar
Nostra Damus
bonjour Guy

mais je n'obtiens que des 0 en b1, b2 et b3. En fait je
peux difficilement

me dépanner puisque tout ce code est aussi clair pour
moi qu'une prophétie

de Nostradamus.


des idées ici
http://esoterism.com/nostradamus/bien.htm

Avatar
Alain CROS
Bonjour.

Si ton appli est prévue pour 800x600

Sub Ajust()
Dim State&, LeHeight#
With Application
State = .WindowState
.ScreenUpdating = False
.WindowState = xlMaximized
LeHeight = .UsableHeight
.WindowState = State
.ScreenUpdating = True
End With
With ActiveWindow
.Zoom = (LeHeight / 329&) * .Zoom
End With
End Sub

Alain CROS

"probsim" a écrit dans le message de news:
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la résolution de l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de ce forum
avait soumis il y a quelque temps en réponse à un problème similaire au mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des zéros.

Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As Long) As
Long
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (lpszDeviceName As Any, ByVal iModeNum As Long,
lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As Double



et ensuite j'ai défini la macro suivante afin de récupérer les paramètres de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux difficilement
me dépanner puisque tout ce code est aussi clair pour moi qu'une prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur la bonne façon
de faire les choses.

merci

Guy




Avatar
probsim
Merveilleux. Merci. Ça règle mon problème. Une petite question: tu divise
par 329&. Pourquoi le &.

Guy
"Alain CROS" a écrit dans le message de news:

Bonjour.

Si ton appli est prévue pour 800x600

Sub Ajust()
Dim State&, LeHeight#
With Application
State = .WindowState
.ScreenUpdating = False
.WindowState = xlMaximized
LeHeight = .UsableHeight
.WindowState = State
.ScreenUpdating = True
End With
With ActiveWindow
.Zoom = (LeHeight / 329&) * .Zoom
End With
End Sub

Alain CROS

"probsim" a écrit dans le message de
news:
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la résolution de
l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses
paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de ce forum
avait soumis il y a quelque temps en réponse à un problème similaire au
mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des zéros.

Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As Long)
As
Long
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (lpszDeviceName As Any, ByVal iModeNum As Long,
lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As Double



et ensuite j'ai défini la macro suivante afin de récupérer les paramètres
de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux
difficilement
me dépanner puisque tout ce code est aussi clair pour moi qu'une
prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur la bonne
façon
de faire les choses.

merci

Guy








Avatar
Clément Marcotte
Bonjour,

par 329&. Pourquoi le &.


C'est une autre façon de désigner l'entier long. Le type LONG. C'est
un relent de l'histoire.

Le BASIC original désignait les entiers avec le %, les nombres en
"double-précision" avec #, les nombres en "simple-précision avec &,
les chaînes de caractères avec $

C'est ainsi qu A% et A& étaient des variables différentes. Fallait pas
se tromper trop souvent, sinon il beuglait "TYPE MISMATCH ERROR".
Comme il ne supportait pas les minuscules et que les variables étaient
au plus deux caractères débutant obligatoirement par une lettre,
fallait pas avoir un programme trop élaboré pour vider le magasin des
variables.

Ces méthodes ont été préservées pour des raisons de compatibilité.


"probsim" a écrit dans le message
de news:
Merveilleux. Merci. Ça règle mon problème. Une petite question: tu
divise


Guy
"Alain CROS" a écrit dans le message de news:

Bonjour.

Si ton appli est prévue pour 800x600

Sub Ajust()
Dim State&, LeHeight#
With Application
State = .WindowState
.ScreenUpdating = False
.WindowState = xlMaximized
LeHeight = .UsableHeight
.WindowState = State
.ScreenUpdating = True
End With
With ActiveWindow
.Zoom = (LeHeight / 329&) * .Zoom
End With
End Sub

Alain CROS

"probsim" a écrit dans le
message de


news:
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la résolution
de



l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses
paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de ce
forum



avait soumis il y a quelque temps en réponse à un problème
similaire au



mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des
zéros.




Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As
Long)



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



lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As Double



et ensuite j'ai défini la macro suivante afin de récupérer les
paramètres



de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux
difficilement
me dépanner puisque tout ce code est aussi clair pour moi qu'une
prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur la
bonne



façon
de faire les choses.

merci

Guy












Avatar
Clément Marcotte
Scusez pardon, c'est le type Single.


"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

par 329&. Pourquoi le &.


C'est une autre façon de désigner l'entier long. Le type LONG. C'est
un relent de l'histoire.

Le BASIC original désignait les entiers avec le %, les nombres en
"double-précision" avec #, les nombres en "simple-précision avec &,
les chaînes de caractères avec $

C'est ainsi qu A% et A& étaient des variables différentes. Fallait
pas

se tromper trop souvent, sinon il beuglait "TYPE MISMATCH ERROR".
Comme il ne supportait pas les minuscules et que les variables
étaient

au plus deux caractères débutant obligatoirement par une lettre,
fallait pas avoir un programme trop élaboré pour vider le magasin
des

variables.

Ces méthodes ont été préservées pour des raisons de compatibilité.


"probsim" a écrit dans le
message

de news:
Merveilleux. Merci. Ça règle mon problème. Une petite question: tu
divise


Guy
"Alain CROS" a écrit dans le message de news:

Bonjour.

Si ton appli est prévue pour 800x600

Sub Ajust()
Dim State&, LeHeight#
With Application
State = .WindowState
.ScreenUpdating = False
.WindowState = xlMaximized
LeHeight = .UsableHeight
.WindowState = State
.ScreenUpdating = True
End With
With ActiveWindow
.Zoom = (LeHeight / 329&) * .Zoom
End With
End Sub

Alain CROS

"probsim" a écrit dans le
message de


news:
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la
résolution




de
l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses
paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de
ce




forum
avait soumis il y a quelque temps en réponse à un problème
similaire au



mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des
zéros.




Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32"
Alias




"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags
As




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




Long,
lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As
Double







et ensuite j'ai défini la macro suivante afin de récupérer les
paramètres



de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux
difficilement
me dépanner puisque tout ce code est aussi clair pour moi
qu'une




prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur
la




bonne
façon
de faire les choses.

merci

Guy















Avatar
jps
bonjour guy
alain ayant prolongé son week end, je prends le relais :
si ce & est le même que celui après DimState, il est l'expression de la
façon selon laquelle les cracks déclarent le type des variables ; nous, la
valetaille, écrivons Dim......As Long, eux utilisent des petits signes tels
que &, #, % et d'autres que j'oublie ; dans le cas qui te préoccupe le "et
commercial" (&) signifie As Long...
et si j'ai dit une imbécillité, alain n'aura qu'à rectifier...
jps

"probsim" a écrit dans le message de
news:
Merveilleux. Merci. Ça règle mon problème. Une petite question: tu divise
par 329&. Pourquoi le &.

Guy
"Alain CROS" a écrit dans le message de news:

Bonjour.

Si ton appli est prévue pour 800x600

Sub Ajust()
Dim State&, LeHeight#
With Application
State = .WindowState
.ScreenUpdating = False
.WindowState = xlMaximized
LeHeight = .UsableHeight
.WindowState = State
.ScreenUpdating = True
End With
With ActiveWindow
.Zoom = (LeHeight / 329&) * .Zoom
End With
End Sub

Alain CROS

"probsim" a écrit dans le message de
news:
Bonjour,

j'ai encore besoin de vos lumières.

Je veux simplement ajuster le "zoom" en fonction de la résolution de
l'écran
de l'utilisateur de mon application. Je dois donc récupérer ses
paramètres
de résolution. J'ai utilisé du code qu'un des contributeurs de ce forum
avait soumis il y a quelque temps en réponse à un problème similaire au
mien
mais ça ne fonctionne pas. Tout ce que je récupère se sont des zéros.

Voici ce que j'ai fait.

J'ai mis dans la déclaration du module ceci:

Option Explicit

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As Long)
As
Long
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (lpszDeviceName As Any, ByVal iModeNum As Long,
lpDevMode As Any) As Boolean

Dim D As DEVMODE
Dim lBits As Long, Largeurecran As Double, Hauteurecran As Double



et ensuite j'ai défini la macro suivante afin de récupérer les
paramètres



de
résolution dans les cellules b1 à b3:


Sub ecran()
'
' ecran Macro
' Macro enregistrée le 2004-12-01 par GP
'
Call EnumDisplaySettings(0&, -1, D)

Range("b1") = D.dmPelsWidth
Range("b2") = D.dmPelsHeight
Range("b3") = D.dmBitsPerPel

'
End Sub


mais je n'obtiens que des 0 en b1, b2 et b3. En fait je peux
difficilement
me dépanner puisque tout ce code est aussi clair pour moi qu'une
prophétie
de Nostradamus.

J'apprécierais grandement si quelqu'un pouvait m'éclairer sur la bonne
façon
de faire les choses.

merci

Guy