Bonjour Chers Amis!
J'ai une petite inquiétude à vous soumettre!
J'aimerais connaitre le code vb qui me permettra de modifier la résolution d'un écran!
merci poour votre aide et agréable journée à vous!!!
Bonjour Chers Amis!
J'ai une petite inquiétude à vous soumettre!
J'aimerais connaitre le code vb qui me permettra de modifier la résolution d'un écran!
merci poour votre aide et agréable journée à vous!!!
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
En tapant sur Google : "changer résolution d'écran VB -net", tu as comme premier lien... :
http://vb.developpez.com/faq/?page=S...ger_resolution
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
Bonjour, GodGives,
Si tu tiens absolument à avoir ce code, je te le donnerai.
Mais lis attentivement ceci, auparavant :
si ce code doit servir dans une application distribuée, je te le déconseille très vivement.
Réfléchis un peu :
1) l'utilisateur final pourra ne pas aprécier du tout une telle intervention sur sa machine (personnellement, et surtout si la présentation de l'appli ne m'a pas prévenu, je "rentre dans le chou" du vendeur.
2) la modification de la résolution a des incidences sur l'ensemble des applications d'une machine, pas seulement ton application, et peut considérablement gêner !
3) gaffe ! ces manipulations sont assez "brutales" et peuvent (c'est arrivé) dans certains cas de figure endommager le moniteur (notamment s'il ne supporte pas la résolution nouvelle).
Voilà ! Tu es maintenant informé; Tu dis donc... et si tu insistes... tu auras ...
Amitiés
EDIT : si nonobstant ce que j'ai écrit, tu adoptes le code fourni par le lien qui t'a été donné (j'espère vraiment que tu abandonneras cette idée) prends au moins quelques précautions que je ne vois pas dans ce code !!!!
A ne pas le faire.... tu risques gros, si tu distribues cette application.
Ce que j'essaie juste de faire est de changer la résolution de l'écran au lancement de l'application et remettre celle définie par l'utilisateur à la fermeture de l'application!
J'utilise vb 6.0 et l'application que je développe est une application maison (à utiliser au sein de la structure)!
Merci pour le code et les précautions à moi apportées! Je vous mettrai au courant de la suite.
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Comme tu veux, ....
Liste des précautions, alors :
- n'utiliser le code du lien qu'après avoir vérifié que le moniteur supporte bien la nouvelle résolution.
Si ce n'est que sur TA machine, c'est facile... Si tu "distribues", il va te falloir écrire du code avancé...et le faire sans faille
- prévoir une interruption brutale de ton appli (quelle qu'en soit la raison) : celà veut dire : gérer des tremplins de mémorisation de la situation originelle et gestion d'un RUNONCE (si arrêt, en plus, de windows par CTRL-ALT-SUP ou interruption de l'alimentation)
Amuse-toi bien... c'est un bon exercice d'apprentissage (car il ne s'agira que de celà s'il ne s'agit que de ta machine, sur laquelle tu pourrais plus facilement et à moindre frais décider la modification manuelle en utilisant l'outil ad hoc de Windows ...)
Merci beaucoup ucfoutu! t'es très sympha!
Le seul problème que j'aurai est l'interruption inopinée du système! Est ce que
t'a une idée pour moi? car là, cela devient très amusant, et très compliqué ...
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Voilà, tu as trouvé les mots : "amusant" et "compliqué" (je préfèrerais complexe).
Et alors :
S'il s'agit d'une application aà distribuer, je ne t'aiderai certes pas dans cette démarche que je réprouve.
S'il ne s'agit pour toi que d'un apprentissage limité à ta seule machine, je comprends que tu en fais un exercice "amusant".
Il importe dans ces conditions que ce soit un véritable exercice.
On va alors faire l'inverse : tu te prends la tête entre les mains, tu écris le code tel que tu le vois... tu le montres... et je pointe du doigt les failles ...
D'accord ? (un exercice n'est amusant que si l'on se prête au jeu .)
Bon exercice et à bientôt, donc...
Ok! Comme tu veux
J'écris le code et je te le soumets! Mais je sais pas comment gérer les interruptions du système.
Au fait, l'application est à utiliser dans un département de la société! il s'agit donc de me proches collaborateurs, alors tu n'a pas de soucis à te faire; On sera entre nous!!!
A tout à l'heure pour le code.
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
J'ai un problème avec une portion du code reçu par le lien!
j'ai mis le code dans un de mes modules et à l'exécution il me met:
"Erreur de compilation:
Seuls des commentaires peuvent apparaître après Ens Sub, End Function ou End Property"
Voici le code qu'il sélectionne pour l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" _ (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Je prends un nouveau projet, je copie et colle le code donné par le lien, ça fonctionne.
Déclare éventuellement les fonctions dans un module à part.
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
ok! Je vais voir
Parallèlement à cela, j'ai une autre idée que je te soumets!
Au lieu de changer la résolution de l'écran, n'est t-il pas mieux d'adapter les fenêtres et contrôles de l'appli à la résolution choisie par l'utilisateur:
voici la procédure:
Là aussi, il me met une erreur à l'exécution (l'objet ne gère pas cette propriété ou cette méthode) pour le la variable ctl.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 Sub adapt_resol(fen As Form) 'Résolution correspondant à la form telle qu'elle est en mode conception Const ResolutionRefX As Long = 1024 Const ResolutionRefY As Long = 768 'Rapport entre la résolution actuelle et celle de référence Dim RatioX As Single Dim RatioY As Single 'Résolution actuelle Dim ResolutionX As Long Dim ResolutionY As Long ResolutionX = Screen.Width / Screen.TwipsPerPixelX ResolutionY = Screen.Height / Screen.TwipsPerPixelY RatioX = ResolutionX / ResolutionRefX RatioY = ResolutionY / ResolutionRefY 'Adapte les dimensions en fonction de la résolution actuelle 'Dim ctl As Control Dim RatioPolices As Single RatioPolices = (RatioX + RatioY) / 2 MsgBox ResolutionRefX & vbTab & ResolutionRefY & vbCrLf & _ ResolutionX & vbTab & ResolutionY & vbCrLf & _ fen.Width & vbTab & fen.Height fen.Width = fen.Width * RatioX fen.Height = fen.Height * RatioY For Each ctl In fen.Controls If TypeOf ctl Is ComboBox Then ctl.Move ctl.Left * RatioX, ctl.Top * RatioY, ctl.Width * RatioX Else ctl.Move ctl.Left * RatioX, ctl.Top * RatioY, ctl.Width * RatioX, ctl.Height * RatioY End If If TypeOf ctl Is Label Then ctl.FontSize = ctl.FontSize * RatioPolices Next End Sub
Que penses-tu de ça?
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Relis tout simplement ce que dit ton aide en ligne à propos des déclarations : Elle doivent apparaître avant toutes procédures ou fonctions (c'est la raison de ton message d'erreur !) et ceci : que ce soit dans le module de ta Form ou dans un module.bas ...
Revenons à nos moutons :
Ce n'est pas par le code, que tu dois commencer, mais par la définition claire et bien pensée du mécanisme à mettre en oeuvre. Une feuille de papier, donc (je ne le répèterai jamais assez) un crayon et l'utilisation de neurones.
Un indice ? le mécanisme d'un circuit électrique de va-et-vient est presque celà !...
Cette étape liminaire est indispensable.
Ah !Au lieu de changer la résolution de l'écran, n'est t-il pas mieux d'adapter les fenêtres et contrôles de l'appli à la résolution choisie par l'utilisateur:
Là oui, tu me fais plaisir ! C'est la seule démarche orthodoxe.
Il va donc te falloir lire une longue conversation entretenue il y a peu à ce propos (une petite recherche sur ce forum...).
J'ai "survolé" ton code dans ce dernier sens... il est clair que tous les contrôles n'ont pas les mêmes propriétés...
Va au moins voir l'une des sources déposées par Delbeke, déjà ...
Elle fera l'affaire si l'interface de ton appli n'est pas complexe.
Je viens de prendre et d'essayer la source de Delbeke mais je pense que cela permet respectivement d'agrandir ou de reduire la taille des objets lorsque leur contenant c'est-à-dire la fenêtre est agrandie ou réduite.
en ce qui concerne le code que je t'ai balancé tout à l'heure, il ne permet pas d'adapter tous les contrôles à la résolution, du moment où ces deniers n'ont pas les mêmes propriétés.
Cela m'oblige à revenir sur ma première décision qui est de changer la résolution de l'écran.
Ce n'est pas très fameux, mais je vais m'y mettre!!!
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Comme tu veux, donc (mais c'est bien dommage)...
Allez, je vais te macher le travail. Le voilà, ton mécanisme, si tu y tiens à ce point :
1) dans le répertoire de ton appli : un fichier toto.txt destiné à être absent ou présent et, si présent, à contenir l'ancienne résolution
2) A l'ouverture de ton appli :
a) si ce fichier existe, restituer la résolution qui y est stockée en mémoire puis "zigouiller" ce fichier puis quitter l'application.
b) si ce fichier n'existe pas :
- le créer et y stocker la résolution en cours
- mettre dans le RUNONCE de la base de registre l'application en cours
3) à la fermeture de l'application : lire le fichier toto.txt et restituer la résolution à l'aide de ce qu'il contient puis supprimer l'application dans le RUNONCE de la base de registre et supprimer ce fichier toto.txt
Le point important, maintenant : ne jamais modifier la résolution sans s'être assuré de ce que le moniteur supporte la résolution proposée
Nous reviendrons sur ce point précis lorsque tu auras su atteindre avec succès les étapes précédentes
Ce que tu me propose me permet-il de gérer les interruptions? sinon, j'ai déjà écrit la procédure qui marche mais avant de l'exécuter, je demande l'avis de l'utilisateur; s'il refuse, je ne change rien!
voici la procédure:
voici comment je l'appelle dans le chargement de ma première fenêtre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 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 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 Public Sub ResolutionEcran(sgWidth As Long, sgHeight As Long) Dim blTMP As Boolean, lgTMP As Long, dmEcran As DEVMODE, res As Long lgTMP = 0 Do blTMP = EnumDisplaySettings(0, lgTMP, dmEcran) lgTMP = lgTMP + 1 Loop While blTMP <> 0 dmEcran.dmFields = DM_WIDTH Or DM_HEIGHT dmEcran.dmPelsWidth = sgWidth dmEcran.dmPelsHeight = sgHeight lgTMP = ChangeDisplaySettings(dmEcran, 0) End Sub
x_resol et y_resol sont des variables globales
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 x_resol = Screen.Width / Screen.TwipsPerPixelX 'résolution horizontale y_resol = Screen.Height / Screen.TwipsPerPixelY 'verticale If x_resol <> 1024 And y_resol <> 768 Then If MsgBox("La résolution que vous utilisez ne vous permet pas de jouir pleinement du confort de votre application." & vbCrLf & _ "Voulez-vous vous adapter à la résolution de l'application? A sa fermeture, votre résolution sera restorée.", vbYesNo + vbQuestion) = vbYes Then Call ResolutionEcran(1024, 768) resol.Checked = vbChecked Else resol.Checked = vbUnchecked End If End If
A la fermeture, je restore l'ancienne résolution
Voilà comment je l'ai fait!
Code : Sélectionner tout - Visualiser dans une fenêtre à part call ResolutionEcran(x_resol, y_resol)
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Ben non ... celà ne gèrera pas les interruptions inopinées ...
Tu n'as d'ailleurs qu'à essayer ... et tu t'en rendras bien vite compte !
Relis tout ce que j'ai écrit concernant le mécanisme à mettre en oeuvre et fais comme préconisé (il a fait ses preuves).
Je sais que ce que j'ai fait ne gère pas les interruptions, c'est pourquoi je suis toujours inquiets!
Par rapport, à ce que tu m'as dit, excuses-moi, mais je vois pas trop clair dans ça; c'est ma deuxième année de programmation!
Merci de me balancer les codes, je me débrouillerai mieux avec.
Merci d'avance pour tout le temps que tu me consacre! t'es génial
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Salut ucfoutu,
je suis moi aussi interressé, et j'ai moi aussi bien lu tes recommandations et tous les warning.
mais par contre je ne vois pas le lien ?
tu peux le mettre ?
Merci.
Ps : pour info, je ne cherche pas forcement a agrandir la resolution, mais pour des raisons perso, je veux mettre en 320x200. voilà. merci d'avance.
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." Jean Jacques ROUSSEAU
Je l'aime bien, cette citation; elle m'inspire beaucoup!
Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
________________________________________________________________________________________________________________________________________
"Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager