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

Contribuez Discussion :

connaitre le DPI de la résolution de votre écran sans api window ou GDI


Sujet :

Contribuez

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut connaitre le DPI de la résolution de votre écran sans api window ou GDI
    bonjour a tous
    voici une petite fonction qui vous donne le dpi sans api
    elle peut être très utiles pour les conversion point to pixel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    MsgBox DPI_off_My_Screen
    End Sub
    Function DPI_off_My_Screen()
    With ActiveWindow.ActivePane: DPI_off_My_Screen = (.PointsToScreenPixelsY(3) - .PointsToScreenPixelsY(0)) / 3 * 72: End With
    End Function
    exemple
    la position d'un control dans le userform en pixel par rapport a l'ecran
    bien entendu pour le rapport a l'userform il faudra calculer la position de l'userform moins son width ou height Inside * DPI_off_My_Screen /72
    cette méthode est employé dans ma contribution tool bar dans userform en moins de deux dans la version sans apis (dernier post)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox me.label1.left*DPI_off_My_Screen/72
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Patricktoulon

    Je viens de tomber à l'instant sur cette contribution
    Ce qui est gênant, c'est que ta "solution" est fausse.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    de toute façon avec toi tout ce que je fait est faux et marche partout ailleurs alors
    si tu parle de 95.99999999999 pour toi au lieu de 96 un round si je l'ai pas déjà fait doit être appliqué
    en tout cas vérifié sur tout les pcs divers d'une boite ca colle
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    retesté

    a 100% =96 dpi
    Nom : a 96(100%).JPG
Affichages : 1506
Taille : 92,3 Ko

    a 125%=120
    Nom : a 120(125%).JPG
Affichages : 1351
Taille : 96,9 Ko

    a 150% =144
    Nom : a 144(150%).JPG
Affichages : 1347
Taille : 90,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    de toute façon avec toi tout ce que je fait est faux
    Quand c'est faux, c'est faux, patricktoulon
    ET DEJA : Depuis quand le DPI d'un écran dépend-il de paramètres d'affichage ?????
    Tu as là un énorme problème et le plus fort, c'est que tu le mets TOI-MEME EN EVIDENCE
    Excuse-moi, mais je te laisse là ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    je parle de celui utilisé pour l'affichage

    dpi=dots per inchs
    Français =point par pouce
    et oui il en est dépendant puisque l'on peut le modifier
    bref j'obtiens la même chose qu'avec les api (get(dc),getdevicecap(x/y)
    ce qui est le but
    et si les résultats serait faux cela avec les api aussi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Sans autre commentaire que ceci :
    Nom : dpi.JPG
Affichages : 1386
Taille : 15,1 Ko
    Immuable quels que soient les "paramètres d'affichage".
    Je t'abandonne là, hein ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Sans autre commentaire que ceci :
    Nom : Capture.JPG
Affichages : 1421
Taille : 183,4 Ko
    prolonger le débat serait polluer ma contribution!
    d'autant plus que cette cle"pixelperin..". n'existe pas dans W7
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bon , allons allons ...
    Comme nous sommes entre gens sérieux, tu vas peut-être commencer à nous expliquer la raison de ce 3 (des deux côtés) ?

    Un 3 qui pourrait d'ailleurs retourner le même résultat en le remplaçant par tout multiple de 3 (et pour cause)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    il me semble l'avoir déjà expliqué dans un autre post non? que tout les multiples de 3 était valables (6,9,18,33,66,etc...)

    quand a savoir pour quoi a vrai dire je n'ai pas encore bien déterminer pourquoi, peut être un soucis de précision du au décimales

    mais c'est une formule qui fonctionne et donne un résultat nickel sur les 37 pc et tous différent aussi bien en mécanique que logicielle et même des vieux PCs

    testé avec maformule et la formule avec api (getdc et getdevicecap)

    teste ca chez toi dans toute les circonstance (windowstate max pour l'app et/ou le acivewindow)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    MsgBox ActiveWindow.ActivePane.PointsToScreenPixelsX(3) '=39
    ' depuis quand 3 points = 39 pixels  avec le windowstate max pour l'app et le activewindow hein!!!!
    MsgBox ActiveWindow.ActivePane.PointsToScreenPixelsX(0)
    ' depuis quand 0 points = 34 pixels  avec le windowstate max pour l'app et le activewindow hein!!!!
    MsgBox ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)
    ' depuis quand 3 - 0 points = 5 pixels  avec le windowstate max et meme fenetré pour l'app (et/OU) le activewindow hein!!!!
    End Sub
    il y a que chez toi que cela est faux comme tu dis

    peut entre devrais tu penser a fonctionner avec une exploitation Windows qui ne soit pas obsolète surtout avec les versions office d'aujourd'hui c'est toi qui vois

    on parle de Microsoft
    raisonne Windows non de dieu!!!
    ma formule fonctionne sauf chez toi point barre
    désolé pour toi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    quand a savoir pour quoi a vrai dire je n'ai pas encore bien déterminer pourquoi, peut être un soucis de précision du au décimales
    C'est du très grand sérieux, cela ...
    peut être un soucis de précision du au décimales
    Cela va bien au-delà d'un simple "souci de précision"
    Bon ... j'ai observé que le soleil apparaissant tous le jours à l'est et se couchait à l'ouest --->> je vais en déduire que c'est le soleil, qui tourne autour de la terre
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    et oui c'est un problème que tu a visiblement

    on te donne une formule et comme mathématiquement elle ne correspond pas a ce que tu a appris .......

    raisonne window non de dieu !!!

    j'ai réédité mon dernier post test les msgbox
    pointstoscreenpixels ne donne pas la conversion point to pixel il donne une position en en pixel par raport a un point ce qui (inclut plein de choses et de paramètres )
    d'autant plus que tu le sait c'est toi même qui a soutenu qu'il fallait faire le calcul des left (application,activewindow,etc...)
    purée t'est testard hein !!!!

    Bon ... j'ai observé que le soleil apparaissant tous le jours à l'est et se couchait à l'ouest --->> je vais en déduire que c'est le soleil, qui tourne autour de la terre
    et pour quelle raison n'en déduiront pas que c'est la terre qui tourne autour du soleil hein

    le soleil bouje figure toi
    sauf que la ou la terre met 1 an pour tourner autour du soleil le soleil lui met environ 260 millions d'années pour fait le tour de la voie lactée qui est son cercle de rotation
    ce qui veux dire que dans x milles ans le même jour et même mois et même heure qu' aujourd'hui et que si on avait la possibilité de regarder la face visible du soleil on se rendrait compte que l'on voit pas la même face si tant est que l'on puisse le comparer le soleil n'étant pas une masse solide a proprement parler comme la terre
    enfin bref
    teste ces purées de msgbox
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    raisonne window non de dieu
    Je suis très content d'avoir trouvé quelqu'un qui va m'expliquer cela !
    J'attends donc l'exposé de "ton" mécanisme Windows. A défaut -->> excuse-moi ... je suis loin d'être preneur de ce "genre"-là !

    purée t'est testard hein !!!!
    ou alors -->> toi
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    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
     
    Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Const LOGPIXELSX = 88
    Const LOGPIXELSY = 90
     
    sub test1()
        hDC = GetDC(0)
        MsgBox "DPI X avec getdevicecap " & GetDeviceCaps(hDC, LOGPIXELSX)
        MsgBox "DPI Y avec getdevicecap " & GetDeviceCaps(hDC, LOGPIXELSY)
        MsgBox "DPI X  avec pointstoscreenpixels " & ((ActiveWindow.ActivePane.PointsToScreenPixelsY(3) - ActiveWindow.ActivePane.PointsToScreenPixelsY(0)) / 3) * 72
        MsgBox "DPI Y  avec pointstoscreenpixels " & (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / 3 * 72
        MsgBox "coéfficient avec getdevicecap " & GetDeviceCaps(hDC, LOGPIXELSX) / 72
        MsgBox "coéfficient avec pointstoscreenpixels " & (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / 3
        End Sub
    point barre !!!
    j'ai pas envie de m'éterniser la dessus cette contrib est suffisamment polluée comme ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    2 autres solution avec regedit

    exemple n° 1 ----> 1 W7 a W10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With CreateObject("WScript.Shell"): DPI= .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager\LastLoadedDPI") : End With
    exemple N°2 (donné par unparia)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set objWSH = CreateObject("WScript.Shell")
    DPI= objWSH.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI")
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour a tous
    voici une petite fonction qui vous donne le dpi sans api
    elle peut être très utiles pour les conversion point to pixel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    MsgBox DPI_off_My_Screen
    End Sub
    Function DPI_off_My_Screen()
    With ActiveWindow.ActivePane: DPI_off_My_Screen = (.PointsToScreenPixelsY(3) - .PointsToScreenPixelsY(0)) / 3 * 72: End With
    End Function
    exemple
    la position d'un control dans le userform en pixel par rapport a l'ecran
    bien entendu pour le rapport a l'userform il faudra calculer la position de l'userform moins son width ou height Inside * DPI_off_My_Screen /72
    cette méthode est employé dans ma contribution tool bar dans userform en moins de deux dans la version sans apis (dernier post)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox me.label1.left*DPI_off_My_Screen/72
    2 autres solution avec regedit

    exemple n° 1 ----> 1 W7 a W10
    With CreateObject("WScript.Shell"): DPI= .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager\LastLoadedDPI") : End With
    exemple N°2 (donné par unparia)
    1
    2
    Set objWSH = CreateObject("WScript.Shell")
    DPI= objWSH.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI")
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Une manière rigolote de procéder.
    Ici, je distingue le dpi 96 du dpi 120 (Franck et moi allons tenter de faire un travail similaire avec 144) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function dpi() As Integer
      Dim anc As Single
      With ActiveSheet.Range("A" & Rows.Count)
        anc = .RowHeight: .RowHeight = 100.25
        If (.Height - Int(.Height)) * 100 Mod 25 = 0 Then dpi = 96 Else dpi = 120
        .RowHeight = anc
      End With
    End Function
    Exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox dpi() & vbCrLf & "et donc --> " & dpi / 72
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour jacques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (.Height - Int(.Height)) * 100 Mod 25 = 0 Then dpi = 96 Else dpi = 120
    si je comprends bien on peut donc sans le int récupérer la même différence que je trouve avec dpi registre /api et ma formule ptscrpix

    je vais étudier cela de près ,on aurait ainsi les nuances d'erreur selon les colonnes
    grosse semaine de boulot mais je regarderais le soir quand même
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je viens d'étendre le code du mécanisme, maintenant capable de déceler tous les dpi (96, 120, 144 et 192) --->>
    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
    Private Sub CommandButton1_Click()
      MsgBox dpi & vbCrLf & "et donc " & dpi() / 72
    End Sub
    Private Function dpi() As Double
      With ActiveSheet.Range("A" & Rows.Count)
        anc = .RowHeight
        .RowHeight = 100.25
        If (.Height - Int(.Height)) * 100 Mod 25 = 0 And (.Height - Int(.Height)) > 0 Then
           dpi = 96
        ElseIf (.Height - Int(.Height)) * 1000 Mod 200 = 0 And (.Height - Int(.Height)) > 0 Then
          dpi = 120
        ElseIf (.Height - Int(.Height)) Mod 100 = 0 Then
           dpi = 144
        ElseIf (.Height - Int(.Height)) * 1000 Mod 125 = 0 Then
           dpi = 192
        End If
        .RowHeight = anc
     End With
    End Function
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

Discussions similaires

  1. Connaitre la résolution de l'écran
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 22h47
  2. Quel est votre version préférée de windows ?
    Par netah25 dans le forum Windows Serveur
    Réponses: 114
    Dernier message: 21/04/2009, 20h43
  3. Réponses: 1
    Dernier message: 05/11/2008, 10h23
  4. Obtenir la "bonne" résolution d'un écran en dpi
    Par geoffroy890 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 23/03/2007, 14h19
  5. recuperer la résolution de l'écran
    Par florent dans le forum C++Builder
    Réponses: 11
    Dernier message: 07/06/2002, 15h01

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