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

VB.NET Discussion :

Connaître la taille réelle de l'affichage


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153
    Par défaut Connaître la taille réelle de l'affichage
    Bonjour,

    Je cherche un moyen pour connaître la taille réelle de l'affichage.
    J'ai utilisé "System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width" mais le résultat n'est valable que si les réglages de l'affichage sont à 100%.
    Par exemple avec un affichage UHD (carte graphique réglée sur 3840x2160) :
    affichage à 100% : valeur renvoyée par Screen : 3840 x 2160
    affichage à 125% : 3072 x 1728
    affichage à 150% : 2560 x 1440
    etc..
    Or les dimensions de l'affichage envoyées au moniteur ne change pas. C'est toujours 3840 x 2160.

    Je cherche donc un moyen de connaître ces dimensions réelles même si l'utilisateur à fait un zoom logiciel.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    Par défaut
    Salut,

    est-ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Screen.PrimaryScreen.WorkingArea.Size
    repondrait a ton besoin ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Merci de t'intéresser à mon problème.
    Malheureusement ça ne change rien (ou plutôt si, ça décompte en plus la hauteur de la barre des tâches).
    En fait j'ai besoin de connaître la taille "réelle" pour faire des captures d'écran.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gfx.CopyFromScreen(New Point(0, 0), New Point(0, 0), bmpc1.Size, CopyPixelOperation.SourceCopy)
    Ça me sert à définir "bmpc1".

    Si mon zoom est à 125%, par exemple, la fonction va copier une zone de 3072 x 1728 commençant a 0,0 depuis l'écran 3840 x 2160 (et non la totalité de l'écran que les dimensions 3072 x 1728 sont pourtant sensées représenter).

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153
    Par défaut
    Bon, j'ai trouvé une solution.
    C'est un peu tordu, mais ça a l'air de fonctionner
    En passant par PInvoke:
    http://www.pinvoke.net/default.aspx/gdi32.getdevicecaps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim hdleEcran As IntPtr = GetDC(0)
    Dim hauteur_ecran As Integer = GetDeviceCaps(hdleEcran, 117)
    Dim largeur_ecran As Integer = GetDeviceCaps(hdleEcran, 118)
    Si, au lieu de 117 et 118 on met 8 et 10 la fonction retourne les mêmes valeurs que Screen.PrimaryScreen.Bounds...

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 89
    Points
    89
    Par défaut
    Je viens de rencontrer ce problème, j'ai un formulaire qui s'affiche en plein écran, et au lieu de fixer l’emplacement des objets a partir de la gauche de l’écran, j'ai créer un code qui calcule les différents emplacements des éléments par rapport a la largeur de l’écran, et met quelque uns au centre

    Hors qu'on on met le zoom a 125% par exemple, la fonction qui calcul les dimensions de l'écran retourne la même résolution qu'avec le zoom a 100%
    ce qui fait que les objets sorte du cadre de l’écran a gauche et a droite

    je crois que la meilleure solution c'est de pouvoir lire le pourcentage du zoom, comme ça on peut modifier le code par rapport a ce pourcentage

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 89
    Points
    89
    Par défaut
    Voila la solution depuis cette page : https://www.pcreview.co.uk/threads/h...-user.2521177/

    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
    Option Compare Database
    Option Explicit
     
    Private Const LOGPIXELSX As Long = 88
     
    Private Declare Function GetDeviceCaps Lib "gdi32.dll" ( _
    ByVal hdc As Long, _
    ByVal nIndex As Long) As Long
     
    Private Declare Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As Long) As Long
     
    Declare Function ReleaseDC Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal hdc As Long) As Long
     
    Public Function GetDpi() As Long
     
    Dim hdcScreen As Long
    Dim iDPI As Long
     
    iDPI = -1
    hdcScreen = GetDC(0)
    If (hdcScreen) Then
    iDPI = GetDeviceCaps(hdcScreen, LOGPIXELSX)
    ReleaseDC 0, hdcScreen
    End If
     
    GetDpi = iDPI
     
    End Function

Discussions similaires

  1. Affichage d'une image en taille réelle
    Par programmeur400 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/12/2011, 16h47
  2. Réponses: 2
    Dernier message: 14/09/2005, 23h11
  3. Réponses: 3
    Dernier message: 28/06/2005, 09h07
  4. [Débutant][JLabel] Connaître la taille du texte
    Par Herisson_f dans le forum Composants
    Réponses: 8
    Dernier message: 04/05/2005, 10h53
  5. [debutant] Dessiner en taille réelle
    Par -=Spoon=- dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/01/2005, 04h11

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