ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Changer la résollution d'écran en un clin d'oeuil   



L'auteur

ybenam
Algérie Algérie
Membre Simple
# 0000002080
enregistré le 21/04/2008


Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

Changer la résollution d'écran en un clin d'oeuil
# 0000000559
ajouté le 10/05/2008 16:24:22 et modifié le 10/05/2008
consulté 6766 fois
Niveau initié

Version(s) Foxpro :
VFP 6.0

Description

Ce court  programme facilite très souvent les choses en matière de redimensionnement automatique de la résolution d'écran et son effet est instantanné et fiable....
Il utilise 2 appels API ChangeDisplaySettings et EnumDisplaySettings.

Il suffit de lui passer 2 paramètres width et height souhaités (ici 1024px x 768px)  comme suit:

Si les dimensions sont identiques à celles installées,il ne se passe rien.

                        benameuryousfi1@gmail.com

Code source :
*utilitaire pour changer la résolution d'écran:
*<do ychange_resol with 1024,768>
****************************************************

  lPARAMETERS xWidth, xHeight

if parameters()<>2
messagebox("Vous devez passer 2 paramètres Width et Height de résolution d'écran en pixels!")
return
endi
wait window ("Votre résolution d'écran sera changée en "+allt(str(xWidth))+'x'+allt(str(xHeight))+" pixels dans quelques secondes!"at srows()/2,scols()/2-10 timeout 1

    LOCAL lnWidth, lnHeight, lnModeNum, lcDevMode

    lnModeNum  = 0
    lcDevMode  = REPLICATE(CHR(0), 156)
    lnWidth    = IIF(EMPTY(xWidth), 800, xWidth)
    lnHeight   = IIF(EMPTY(xheight), 600, xheight)

    DECLARE INTEGER EnumDisplaySettings   IN Win32API ;
            STRING lpszDeviceName,;
            INTEGER iModeNum, ;
            STRING @lpDevMode

    DECLARE INTEGER ChangeDisplaySettings IN Win32API STRING @lpDevMode, INTEGER dwFlags

    DO WHILE EnumDisplaySettings(NULL, lnModeNum, @lcDevMode) <> 0
        lnModeNum = lnModeNum +1
    ENDDO

    lcDevMode = STUFF(lcDevMode,  41, 4, LongToStr(1572864))
    lcDevMode = STUFF(lcDevMode, 109, 4, LongToStr(xWidth))
    lcDevMode = STUFF(lcDevMode, 113, 4, LongToStr(xheight))

    ChangeDisplaySettings(@lcDevMode, 1)
    clea events

return



FUNCTION LongToStr
    LPARAMETERS lnLongVal
    LOCAL lnCnt, lcRetStr
    lcRetStr = ''
    FOR lnCnt = 24 TO 0 STEP -8
        lcRetStr = CHR(INT(lnLongVal/(2^lnCnt))) + lcRetStr
        lnLongVal = MOD(lnLongVal, (2^lnCnt))
    NEXT
    RETURN lcRetStr
ENDFUNC

Commentaires
le 10/05/2008, Jean à Grenoble a écrit :
J'ai deux questions :

1) j'étai parti pour redimensionner mes écrans, container, ..... en fonction de la résolution à partir de la classe mwresize (www.prolib.de) de façon à ce que mes écrans ait le même 'look' quelque soit le PC. C'est une méthode compliquée. Y-a-t-il un danger à changer la résolution d'un écran ? Que se passe-t-il pour les autres applis qui pourraient tourner à coté de VFP (Open Office, Firefox, Thunderbird) ?

2) on a un moyen de récupérer les dimensions courantes de l'écran pour être capable de le remetre dans son état initial en sortant de l'appli ?

A +
Jean à Grenoble

le 25/05/2008, ybenam a écrit :
Il n'y a rien de mieux que de faire un test avec plusieurs fenêtres ouvertes et de changer la résolution d'écran avec le programme....je l'ai fait avec Word,Frontpage et j'assure qu'il n'y a aucun risque jusqu'à preuve du contraire !
cette méthode est rapide et fiable à mon avis.
Euh...désolé,Les 3 applications que tu as signalées sont inconnues chez moi ....
D'ailleurs j'ignore pourquoi les applications sophistiquées de changement de résolution d'écran posent une question (avec un thermomètre ) une fois le changement opéré à chaque fois....
Les fonctions sysmetric(1) et sysmetric(2) retournent les dimensions courantes de l'écran.

le 26/05/2008, eric leissler a écrit :
Jean
Voir la contrib de mike
http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000263
elle fonctionne très bien.

le 18/06/2008, Michel Lévy a écrit :
La modifiction de la résolution de l'écran depuis une application me semble "hasardeuse", non pas sur le plan technique, mais bien sur le point soulevé par Mike dans sa contribution à ce sujet.

Je trouve que nos droits sur la machine d'un utilisateur se limitent à l'application que nous développons. Changer la résolution a des conséquences sur son bureau, ainsi que sur les autres applications en cours de fonctionnement. C'est au delà de la limite de ma propriété intellectuelle.

le 18/06/2008, eric leissler a écrit :
Michel, je pense que tu as tout à fait raison et Mike l'avait bien souligné d'ailleurs.
J'en ai au besoin sur un projet très spécifique et il s'agissait d'une demande du directeur du service informatique d'une grosse boite qui souhaitait que la modification se fasse à l'intérieur du programme et non par les propriétés de l'affichage.
D'ailleurs, les utilisateurs n'avaient pas accès à cette fonction.
Mais encore une fois, il s'agissait d'un cas extrèment spécifique.
Il me semble qu'aux états unis, c'est même réprehensible si ma mémoire est bonne.
A utiliser avec parcimonie extrème donc

le 19/06/2008, ybenam a écrit :
Dans beaucoup de programmes, j'ai vu des auteurs signer "A vos risques et périls et sans garantie !".Faut il préambuler cet article comme cela ?


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3