Je recherche a changer la resolution de l´ecran au demarage de mon fichier et de

oz38 Messages postés 22 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 31 mai 2006 - 30 mai 2006 à 17:06
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 9 juin 2006 à 03:54
jái un gros problemes, lorsque que lón change de poste, nous avons pas obligatoirement la meme resolutions graphique , et mes userforms deviennent énormes. jái voulue les mettre a 80% de sa taille original , mais cela fait un joli caca!!!!! Donc je cherche un moyen, pour augmenter ma resolution graphique lors de lútilisation de ce programme, et que par la suite, a la fermeture du dossier ,il reprenne ses configues dórigine. Je suis vraiment coincé avec ce poroblème. Si quelqu´un a une solution, peut il venir a mon secour.

8 réponses

NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
30 mai 2006 à 17:18
Bonjour

Copuremment, si la résolution graphique est faible (relativement parlant), c'est qu'il y a une raison (carte graphique, moniteur), donc, cherche une autre méthode, c'est ce que je te conseille.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
oz38 Messages postés 22 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 31 mai 2006
30 mai 2006 à 17:26
le probleme qu´il y a des gens preferent travailler avec une resolution plus grosse que d´autres, mais les cartes sont capable d´aller bien plus haut que ce que je veux. si il faut que je cherche dans une autre direction, la quelle me propose tu? car malheureusement je n´en vois pas
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
30 mai 2006 à 17:43
c'est à ton programme de s'adapter à l'utilisateur, pas le contraire : il existe des sources qui redimensionnent les interfaces automatiquement selon la taille de l'écran par exemple.

Bien souvent, il vaut mieux développer une interface avec une résolution la plus faible possible, quitte à augmenter la taille des contrôles dynamiquement par la suite, plutôt que de faire une interface trop grande de base !

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
<s></s>
0
Claude669 Messages postés 23 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 29 janvier 2013
30 mai 2006 à 17:52
0

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

Posez votre question
oz38 Messages postés 22 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 31 mai 2006
31 mai 2006 à 10:35
bon pas de probleme pour recupere le code source mais comment lancer les modules de cette source, car la je patoge dans la puré.

Dans une discution le créateur dit qu´il faut appeler Resolution() et RestaureRes() mais je ne les voie pas. si quelqu´un comprend bien ce qu´il faut faire, peut il m´expliquer, je veut juste executer ma nouvelle resolution au demarrage du fichier et avant la fermeture restaurer ma configuration d´origine. Je n´ai pas trop assimilé le langage de programmation
0
oz38 Messages postés 22 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 31 mai 2006
31 mai 2006 à 15:35
Oubliez ce que j´ai écris avant, je lance le programme et j´ai plein de problème<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>




 
dans le code:

Option Explicit
Global Const ReqResX = 1024
Global Const ReqResY = 768
Global Const ReqCoul = 32
Global Const CléPrim = HKEY_LOCAL_MACHINE
Global Const CléSec = "SOFTWARE\TestRes"
Global CurResX As Integer, CurResY As Integer, CurCoul As Integer
Global MustChangeRes As Boolean




Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Type DEVMODE
   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
Public Enum EnumSetRes
   SUCCES = 0
   ECHEC = -2
End Enum




'Fenêtre au premier planPrivate Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, Optional ByVal X As Long 0, Optional ByVal Y As Long 0, Optional ByVal cx As Long = 0, Optional ByVal cy As Long = 0, Optional ByVal wFlags As Long = 3) As Long
Public Enum SetWndPosConst
WND_TOPMOST = -1
WND_NOTOPMOST = -2
End Enum





Public Function SetWndPos(Fenêtre As Form, Position As SetWndPosConst)


Cette ligne, VBA n´en veut pas, il dit type définit par l´utilisateur non définit, comment y remédier







Dim dummy As Long
dummy = SetWindowPos(Fenêtre.hWnd, Position, 0, 0, 0, 0, 3)
End Function


Public Function GetNbCoul() As Integer
   Dim dmEcran As DEVMODE
   Dim blTMP As Boolean
   blTMP = EnumDisplaySettings(0, -1, dmEcran)
   GetNbCoul = dmEcran.dmBitsPerPel
End Function
Public Function GetResX() As Integer
   Dim dmEcran As DEVMODE
   EnumDisplaySettings 0, -1, dmEcran
   GetResX = dmEcran.dmPelsWidth
'   GetResX = Screen.Width \ Screen.TwipsPerPixelX
End Function
Public Function GetResY() As Integer
   Dim dmEcran As DEVMODE
   EnumDisplaySettings 0, -1, dmEcran
   GetResY = dmEcran.dmPelsHeight
'   GetResY = Screen.Height \ Screen.TwipsPerPixelY
End Function
Public Function SetRes(ByVal RezX As Single, ByVal RezY As Single, ByVal NbCoul As Integer) As EnumSetRes'    If RezX GetResX And RezY GetResY And NbCoul = GetNbCoul Then Exit Function
    Dim dmEcran As DEVMODE
    Dim blTMP As Boolean, lgTMP As Long
    blTMP = EnumDisplaySettings(0, -1, dmEcran)    If RezX dmEcran.dmPelsWidth And RezY dmEcran.dmPelsHeight And NbCoul = dmEcran.dmBitsPerPel Then Exit Function
    'dmEcran.dmFields = 1835008
    If RezX <> dmEcran.dmPelsWidth Then dmEcran.dmFields = &H80000
    If RezY <> dmEcran.dmPelsHeight Then dmEcran.dmFields = dmEcran.dmFields Or &H100000
    If NbCoul <> dmEcran.dmBitsPerPel Then dmEcran.dmFields = dmEcran.dmFields Or &H100000
    dmEcran.dmPelsWidth = RezX
    dmEcran.dmPelsHeight = RezY
    dmEcran.dmBitsPerPel = NbCoul
    Call ChangeDisplaySettings(dmEcran, 1)
    blTMP = SendMessage(65535, 27, 0, 0)
    Dim ScInfo As Long
    ScInfo = RezY * 2 ^ 16 + RezX
    SendMessage &HFFFF&, &H7E, ByVal NbCoul, ByVal ScInfo
    SetRes = lgTMP
End Function


Public Sub Resolution()
   CurResX = GetResX
   CurResY = GetResY
   CurCoul = GetNbCoul
   If CurResX <> ReqResX Or CurResY <> ReqResY Or CurCoul <> ReqCoul Then
      If GetValue(CléPrim, CléSec, "AutoChangeRes") = "OK" Then
         Call SetRes(ReqResX, ReqResY, ReqCoul)
      Else
         If CurResX < ReqResX Or CurResY < ReqResY Or CurCoul < ReqCoul Then
            MustChangeRes = True
         Else
            MustChangeRes = False
         End If
         If MustChangeRes = False Then
            If GetValue(CléPrim, CléSec, "PasAff") = "OK" Then Exit Sub
         End If
         Load frmChangeRes
         Unload frmChangeRes
      End If
   End If
End Sub
VBA le comprend comme une variable mais qu´est ce que c´est?
Public Sub RestaureRes()
   Call SetRes(CurResX, CurResY, CurCoul)
End Sub

si quelqu´un pouvait des fois me mettre un petit commentaire pour expliquer ce que veulent dire les lignes de programme SVP
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
31 mai 2006 à 21:42
D'une part, relie la remarque de DarkSid. Par exemple, si ton appli
crashe ou que l'utilisateur met fin au processus, la résolution ne sera
pas remise dans l'état où elle était. (Elle serait cependant remise au
démarrage du PC).


Je n'ai jamais fait de VBA, mais à ce que j'en sait, il y a pas mal de
limitation côté possibilité par rapport à Visual Basic 6. En
l'occurence, VBA ne connait apparement pas le type form...


Par contre, on dirait que tu peux appeler l'API, ce qui est le principal.


Les fonctions intéressantes sont "EnumDisplaySettings" et
"ChangeDisplaySettings". La première énumère les possibilité
d'affichage de l'écran (Ou d'une imprimante/d'un scanner). La seconde
permet de changer le mode d'affichage.


Il faut que tu récupère la résolution de l'écran au départ de l'appli,
que tu la sauvegarde  dans un coin, que tu modifis la
résolution... Et  que tu la restitue à la fin. Il faut aussi que
tu empèche de lancer 2 instances de ton appli ! Regarde du côté de
"App.PreviousInstance" ou quelque chose comme ça.  En effet, si tu
réfléchis deux seconde, tu t'apercevras que 2 instances fermé dans le
même orde quelles ont été ouverte poserait problème... (Par contre, je
serais surppris que App existe dans VBA)


Je vais essayer de faire le ménage... Je garantis rien !


'Demande de signaler les variables non déclarées. Très pratique !

Option Explicit


'Déclaration des deux fonctions utilisées

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

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As
Long


'Un enregistrement utilisé dans les 2 API. Définie la config d'un écran.

Private Type DEVMODE

   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


'Fonction qui renvoie la largeur et la hauteur actuelle de l'écran

Public Sub GetRes(ScreenWidth As Long, ScreenHeight As Long)

Dim dmEcran As DEVMODE


EnumDisplaySettings 0, -1, dmEcran

ScreenWidth = dmEcran.dmPelsWidth

ScreenHeight = dmEcran.dmPelsHeight

End Sub


'Fonction qui modifie la résolution de l'écran

Public Sub SetRes(ByVal ScreenWidth As Long, ByVal ScreenHeight As Long)

Dim dmEcran As DEVMODE


EnumDisplaySettings 0, -1, dmEcran

dmEcran.dmPelsWidth = ScreenWidth

dmEcran.dmPelsHeight = ScreenHeight

ChangeDisplaySettings dmEcran, 0

'J'ai changer le 1 en 0. Je crois que ça marche aussi bien sinon mieux comme ça.

'Mais hésite pas à remettre 1 si le zéro marche pas !

End Sub


(Code non testé, désolé, pas VB6 sous le clavier)


L'aide des deux API utilisées :  ChangeDisplaySettings   EnumDisplaySettings


La fonction de changement de résolution ne fonctionne que si elle est supportée par l'écran (Vérifiable par EnumDisplaySettings).


Vala. dans ton cas, un GetRes puis un SetRes au démarrage, puis un
SetRes à la fermeture, en passant en paramètre les valeurs récupérées
par le GetRes.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 juin 2006 à 03:54
Pour infos, certaines API fonctionnent avec VB 6 mais pas avec VBA et inversement.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
Rejoignez-nous