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

Access Discussion :

Affichage d'un graphique en fonction config affichage écran [AC-2013]


Sujet :

Access

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2017
    Messages : 13
    Par défaut Affichage d'un graphique en fonction config affichage écran
    Bonjour,
    Dans une application réaliséeavec ACCESS 2013, 32 bits, j'ai un état qui comprend différents éléments dont des graphiques générés avec une fonction , et un autre qui est un objet MSGRPH8. Suivant le paramètrage d'affichage écran du PC utilisé (100% ou 150%) mon graphique ne s'affiche pas dans la totalité de la zone du contrôle, les autres objects de l'état ne sont pas affecté par ce paramètrage. J'ai recherché le facteur d'échelle en l'appliquant au contrôle je change aussi les dimensions du contrôle. J'ai donc essayé de l'affecté au graphique avec le code suivant :
    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
    Private Sub Report_Load()
    Dim hdc As LongPtr
        Dim dpi As Long
        Dim scaleFactor As Double
     
        ' Obtenir le contexte de l'appareil
        hdc = GetDC(0)
     
        ' Récupérer le DPI
        dpi = GetDeviceCaps(hdc, LOGPIXELSX)
     
        ' Libérer le contexte de l'appareil
        ReleaseDC 0, hdc
     
        ' Calculer le facteur d'échelle (par exemple, pour un DPI de 96 = 100% d'échelle)
        scaleFactor = dpi / 96
        MsgBox (scaleFactor)
     
     
           ' Définir les dimensions du contrôle contenant le graphique
        Dim ctlGraph As Object
        Set ctlGraph = Me!Graphique47  'affecte le controle contenant le graphique
     
        ' Définir les dimensions du graphique à l'intérieur du contrôle
        ctlGraph.Object.Width = ctlGraph.Width * 1.5 ' Ajuste la largeur du graphique
        ctlGraph.Object.Height = ctlGraph.Height * 1.5 ' Ajuste la hauteur du graphique
     
    End Sub
    Mon graphique ne s'affiche plus

    J'ai aussi mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Compare Database
    Option Explicit
    Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr) As Long
     
    Private Const LOGPIXELSX As Long = 88 ' DPI horizontal
    Private Const LOGPIXELSY As Long = 90 ' DPI vertical
    Je n'arrive pas à savoir si j'ai une erreur de syntaxe ou plutôt de méthode pour traiter le problème.
    Merci pour toute aide

  2. #2
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 309
    Par défaut
    Bonjour
    Vous indiquez être en 32bits, mais vos déclarations sont en 64bits
    A tester, mais sans garantie
    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
    Option Compare Database
    Option Explicit
     
    #If VBA7 Then
        Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
        Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hdc As LongPtr) As Long
        Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal Index As Long) As Long
    #Else
        Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
        Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
        Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal Index As Long) As Long
    #End If
     
    Private Const LOGPIXELSX As Long = 88 ' DPI horizontal
    Private Const LOGPIXELSY As Long = 90 ' DPI vertical
    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
    Private Sub Report_Load()
    Dim hdc As Long
    Dim dpi As Long
    Dim scaleFactor As Double
     
    ' Obtenir le contexte de l'appareil
    hdc = GetDC(0)
     
    ' Récupérer le DPI
    dpi = GetDeviceCaps(hdc, LOGPIXELSX)
     
    ' Calculer le facteur d'échelle (par exemple, pour un DPI de 96 = 100% d'échelle)
    scaleFactor = dpi / 96
    MsgBox (scaleFactor)
     
    ' Libérer le contexte de l'appareil
    ReleaseDC 0, hdc
     
    ' Définir les dimensions du contrôle contenant le graphique
    Dim ctlGraph As Object
    Set ctlGraph = Me!Graphique47 'affecte le controle contenant le graphique
     
    ' Définir les dimensions du graphique à l'intérieur du contrôle
    ctlGraph.Width = ctlGraph.Width * 1.5 ' Ajuste la largeur du graphique
    ctlGraph.Height = ctlGraph.Height * 1.5 ' Ajuste la hauteur du graphique
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP :weird:
    Merci de cliquer sur :plusser: si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur :resolu:

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2017
    Messages : 13
    Par défaut
    Merci, en effet en corrigeant mes déclarations, j'ai un affichage, mais le facteur d'échelle s'applique au contrôle et pas seulement au graphique. Je continue à chercher. Il faudrait que j'arrive à faire afficher le graphique "plein écran" dans la zone de contrôle quelque soit le paramétrage de l'écran du PC Sinon je vais devoir remplacer la méthode d'exécution du graphique. Merci

    En poussant les recherches, il semble qu'il soit impossible pour un objet MSGRAPH.Chart8 de redimensionner le graphique à l'intérieur du contrôle.

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

Discussions similaires

  1. [AC-2013] Access affichage graphique en fonction configuration PC
    Par CEREMA_Toul dans le forum Access
    Réponses: 4
    Dernier message: 22/08/2025, 09h27
  2. Réponses: 14
    Dernier message: 26/03/2016, 10h58
  3. [c.graphique] conseils pour config peu gourmande
    Par Invité dans le forum Composants
    Réponses: 29
    Dernier message: 06/08/2007, 09h18
  4. Passage de graphique vers fonction
    Par thechakib dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/05/2007, 17h05
  5. Graphique en fonction de cellules changeantes
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 18h47

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