IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Un poste --> plusieurs Ecrans [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut Un poste --> plusieurs Ecrans
    Bonjour,

    Avec plusieurs écrans, Je n'arrive pas à sélectionner un écran distinct afin d'Agrandir un formulaire jusqu'à 100% de la taille de l'écran suivant le travail de Tofalu :Les Sources

    Il y a 2/3 ans j'ai renoncé en optant pour un moindre mal. En cas d'utilisateur avec écran multiple ==> "Niet" J'otais toute possibilité de recourir à cette fonction par un simple :
    Dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Const SM_CMONITORS As Long = 80&
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
     
    Public Function getNumberScreen() As Long
      getNumberScreen = GetSystemMetrics(SM_CMONITORS)
    End Function
    Puis à l'ouverture du formulaire suceptible d'être agrandi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If getNumberScreen = 1 Then
    ...........
     Else
    ....................
    Si il se trouve au fond de vos mémoires quelque chose qui permette d'indiquer à Access sur quel écran on veut activer notre formulaire..

    Cordialement.

  2. #2
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    Voici ce que j'utilise pour détecter la résolution d'écran :

    avec les déclarations suivantes :
    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
     
    '** Structure pour enumDisplaydevice
    Private Type DISPLAY_DEVICE
      cb As Long
      DeviceName As String * 32
      DeviceString As String * 128
      StateFlag As Long
      DeviceID As String * 128
      DeviceKey As String * 128
    End Type
     
    Public Type DEVMODE
      dmDeviceName As String * CCDEVICENAME
      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 * CCFORMNAME
      dmUnusedPadding As Integer
      dmBitsPerPel As Integer
      dmPelsWidth As Long
      dmPelsHeight As Long
      dmDisplayFlags As Long
      dmDisplayFrequency As Long
    End Type
     
    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Boolean
    Private Declare Function EnumDisplayDevices Lib "user32" Alias "EnumDisplayDevicesA" (Unused As Any, ByVal iDevNum As Long, lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Long) As Boolean
    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
    Public Function getDisplayResolution() As DEVMODE
      Dim DevM As DEVMODE
      Dim DD As DISPLAY_DEVICE
      Dim addr As Long
      Dim i As Long
     
      DD.cb = Len(DD)
      DevM.dmSize = Len(DevM)
      i = 0
     
      EnumDisplayDevices ByVal 0&, 0, DD, ByVal 0&
      EnumDisplaySettings DD.DeviceName, ENUM_CURRENT_SETTINGS, DevM
     
      getDisplayResolution = DevM
    End Function
    L'objet DEVMODE permet de me retourner la résolution de l'écran et refait tous les calculs pour l'affichage (au niveau de ma gestion de l'interface graphique) pour pouvoir gérer plusieurs résolution pour mon application Access.

    Pour la sélection de différents écrans sur une seule machine, de mémoire il faut se pencher sur EnumDisplayDevices, une petite recherche sur ce site, sur les API et sur la msdn est nécéssaire.

    http://msdn.microsoft.com/en-us/libr...(printer).aspx
    http://msdn.microsoft.com/en-us/libr...(printer).aspx

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour,

    La gestion de plusieurs résolutions d'écrans ne me crée aucun soucis ainsi que l'énumération du nombre d'écrans.

    Pour la sélection d'un écran spécifique j'étudie tes liens.
    Merci.

    Cordialement.

  4. #4
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    un petit exemple qui pourra t'aider :

    code à mettre dans un module :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Option Compare Database
    Option Explicit
     
    Private Const SM_CMONITORS As Long = 80&
    Private Const SWP_NOSIZE As Long = &H1
    Private Const SWP_NOACTIVATE As Long = &H10
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    Private Type tagMONITORINFO
       cbSize As Long
       rcMonitor As RECT
       rcWork As RECT
       dwFlags As Long
    End Type
     
    Private Declare Function GetMonitorInfo Lib "user32" _
                                            Alias "GetMonitorInfoA" ( _
                                            ByVal hMonitor As Long, _
                                            ByRef tMonInfo As tagMONITORINFO) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
     
    Private Declare Function EnumDisplayMonitors Lib "user32" (ByVal hdc As Long, ByRef lprcClip As Any, ByVal lpfnEnum As Long, dwData As MonitorData) As Long
     
    Private Declare Function SetWindowPos Lib "user32" _
                (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
                 ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
     
    Private Type MonitorData
        MonitorForm As Access.Form
        MonitorNumber As Long
    End Type
     
    '--------------------------------------------------------------
    ' Position un formulaire sur un moniteur
    '--------------------------------------------------------------
    ' pForm : Formulaire à positionner
    ' pNumMoniteur : Numéro du moniteur
    '--------------------------------------------------------------
    Public Sub PosFormOnMonitor(pForm As Access.Form, Optional pNumMonitor As Long = 1)
        Dim ldata As MonitorData ' Données personnalisées pour énumération
        If GetSystemMetrics(SM_CMONITORS) > pNumMonitor Then Exit Sub
        Set ldata.MonitorForm = pForm
        ldata.MonitorNumber = pNumMonitor
        EnumDisplayMonitors ByVal 0&, ByVal 0&, AddressOf MonitorEnumProc, ldata
    End Sub
     
    ' Enumération des moniteurs
    Private Function MonitorEnumProc(ByVal hMonitor As Long, ByVal hdcMonitor As Long, lprcMonitor As RECT, dwData As MonitorData) As Long
    Dim lInfo As tagMONITORINFO
    dwData.MonitorNumber = dwData.MonitorNumber - 1
    If dwData.MonitorNumber = 0 Then
        ' Si moniteur demandé
        ' Initialise la structure
        lInfo.cbSize = Len(lInfo)
        ' Info du moniteur
        GetMonitorInfo hMonitor, lInfo
        ' Position le formulaire sur le moniteur
        SetWindowPos dwData.MonitorForm.hwnd, 0, lInfo.rcMonitor.Left, lInfo.rcMonitor.Top, 0, 0, SWP_NOSIZE
        ' Sélectionne le fomumaire
        DoCmd.SelectObject acForm, dwData.MonitorForm.Name
        ' Agrandit le formulaire
        DoCmd.Maximize
        ' Stoppe l'énumération
        MonitorEnumProc = 0
    Else
        ' Sinon, continue l'énumération
        MonitorEnumProc = 1
    End If
    End Function
    Fonction à exécuter par exemple sur ouverture du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_Load()
    PosFormOnMonitor Me, 2
    End Sub
    ce code positionne et agrandit le formulaire sur le deuxième écran
    le formulaire doit avoir la propriété fenêtre indépendante à oui, sinon c'est toute l'appli qu'il faut déplacer sur le second écran (comme dans l'exemple des sources mais avec les coordonnées de l'écran voulu)

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour,

    Merci Arkham46 ainsi qu'à toi Tonioyo
    Je fais des essais et quand c'est OK :
    ==> Tag Résolu
    ==> Résultat du travail

    Cordialement.

    Ps : J'en profite pour confirmer l'outil indispensable que sont le forum et la Faq :
    Au lieu d'ouvrir un bouquin pour me rafraîchir la mémoire : Zou! Un tour Faq/Forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. storyboard commun à plusieurs ecrans
    Par topolino dans le forum Silverlight
    Réponses: 10
    Dernier message: 09/04/2009, 17h37
  2. lier plusieurs ecrans claviers et souris a une seule machine
    Par debutantasp dans le forum Périphériques
    Réponses: 6
    Dernier message: 05/01/2008, 22h54
  3. problème de post de plusieurs informations
    Par lordsaka dans le forum Langage
    Réponses: 1
    Dernier message: 21/05/2007, 09h30
  4. Récupérer le dernier post de plusieurs blogs
    Par ZN dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 03/02/2007, 13h15
  5. Réponses: 1
    Dernier message: 22/01/2007, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo