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

Comment changer la résolution de l'écran avec Foxpro   



L'auteur

Mike Gagnon
Canada Canada
Membre Simple
# 0000000025
enregistré le 14/10/2004

Gagnon Mike
Pointe Cla H9R 3K8
de la société Carver Technologies Inc.
Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

Comment changer la résolution de l'écran avec Foxpro
# 0000000263
ajouté le 01/12/2005 00:32:50 et modifié le 29/03/2006
consulté 9897 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0

Description
Je publie ce code avec réticence. Le code qui suit va changer le résolution d'un écran, mais il y a des mises en garde. Les icônes du bureau peuvent se déplacer et l'utilisateur a choisi sa résolution optimale, qui sommes nous pour lui forcer un autre résolution? Certaines lois en Amérique du Nord interdisent ce genre de pratique. Si votre application est utilisée par une personne qui a de la difficulté visuellement, doit on les forcer a regarder l'application avec une résolution qui est impossible à lire? Utiliser votre bon jugement. Ou construisez une application qui peut s'adapter à la résolution de l'utilisateur plutôt que de forcer votre vision des choses .
Code source :
Local lnReturn, lnWidth, lnHeight, lnScrInfo
Local lnhDC, lnBPP, lnPELsWidth, lnPELsHeight
Local lcPELsWidth, lcPELsHeight
Local DeviceMode, OldDeviceMode

Declare Long EnumDisplaySettings in User32 ;
    String cDeviceName, Long nGraphicsMode, String @cDevMode

Declare Long ChangeDisplaySettings in User32 ;
    String cDevMode, Long nFlags

Declare Integer SendMessage in User32 ;
    Long nhWnd, Integer Msg, Integer wParam, Long lParam

*** New Display Settings (800x600)
lnWidth = 800
lnHeight = 600

DeviceMode = replicate(chr(0), 134)
If (EnumDisplaySettings(Null, -1, @DeviceMode) != 0)
    OldDeviceMode = DeviceMode
    lnBPP = DWord2Num(substr(DeviceMode,105,4))
    lnPELsWidth = DWord2Num(substr(DeviceMode,109,4))
    lnPELsHeight = DWord2Num(substr(DeviceMode,113,4))

    lcPELsWidth = Num2DWord(lnWidth)
    lcPELsHeight = Num2DWord(lnHeight)

    DeviceMode = left(DeviceMode, 108) + ;
        lcPELsWidth + lcPELsHeight + right(DeviceMode, 8)
    lnReturn = ChangeDisplaySettings(DeviceMode, 4)
    Do case
        Case (lnReturn == 0)   && success
            ChangeDisplaySettings(DeviceMode, 1)

        *** Notify all the windows that display settings has changed
            lnScrInfo = lnHeight * 2^lnBPP + lnWidth
            SendMessage(0xFFFF, 0x7E, lnBPP, lnScrInfo)
            MessageBox('Display Settings has been changed' ;
               + chr(13) + 'Press any key to Reset', 64, ;
               ' Reset Display Settings')

            ChangeDisplaySettings(OldDeviceMode, 1)
            lnScrInfo = lnPELsHeight * 2^lnBPP + lnPELsWidth
            SendMessage(0xFFFF, 0x7E, lnBPP, lnScrInfo)

        Case (lnReturn == 1)   && need restart
            ?'Change Display Needs to restart'

        Otherwise
            MessageBox('Display Settings not supported', ;
               16, ' *** ERROR ***')
    EndCase
endif
Clear Dlls
Clear all


Function DWord2Num(tcBuffer)
    Local lnResult
    lnResult = asc(substr(tcBuffer, 1,1)) + ;
        asc(substr(tcBuffer, 2,1)) * 256 + ;
        asc(substr(tcBuffer, 3,1)) * 65536 + ;
        asc(substr(tcBuffer, 4,1)) * 16777216

    Return lnResult
EndFunc

Function Num2DWord(tnNum)
    Local lc0, lc1, lc2, lc3
    lc3 = chr(int(tnNum / 16777216))
    tnNum = mod(tnNum, 16777216)

    lc2 = chr(int(tnNum / 65536))
    tnNum = mod(tnNum, 65536)

    lc1 = chr(int(tnNum / 256))
    lc0 = chr(mod(tnNum, 256))

    Return lc0 + lc1 + lc2 + lc3
EndFunc

Commentaires
le 02/12/2005, eric leissler a écrit :
Merci Mike
Je réécris mon commentaire car il a disparu je ne sais pourquoi.
En fait jevais donner le choix à mes utilisateurs de passer en 1024 par un menu.
S'il acceptent, je passe en 1024 grace àt on code, sinon, je laisse la résolution.
Donc il n'est pas question d'aller à l'encontre de la volonté de l'utilisateur, mais simplement de lui éviter de le faire en dehors de l'appli.

Merci Mike
Atoutfoxement
Aumeric

le 03/05/2006, Mike Gagnon a écrit :
Oui je comprends, mais qu'arrive-t-il lorsqu'un l'utilisateur pense que sa carte video peut supporter une autre résolution et il accepte le changement? Qui va arranger son ordinateur qui ne fonctionne plus?

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