VB.Net : Comment obtenir le nb de pixels par pouce d'un écran ?

Signaler
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012
-
Messages postés
14741
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 décembre 2020
-
Y a t-il une autre solution que ...

<DllImport("gdi32.dll")> _
Public Shared Function CreateIC(ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As IntPtr) As IntPtr
End Function

<DllImport("gdi32.dll")> _
Private Shared Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIndex As Integer) As Integer
End Function

Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90

Dim hdc As IntPtr
hdc = CreateIC("DISPLAY", Nothing, Nothing, Nothing) 'Obtient le HDC de l'écran
nb_pixel_par_pouce_X = GetDeviceCaps(hdc, LOGPIXELSX)
nb_pixel_par_pouce_Y = GetDeviceCaps(hdc, LOGPIXELSY)

Merci

5 réponses

Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Bonjour,

Je ne connais pas .NET, mais en VB6 tu obtiens simplement le nombre de Twips par Pixels à l'aide de l'objet Screen (TwipsPerPixelX/Y).

En sachant qu'il y a 1440 Twips par pouce (source http://support.microsoft.com/kb/76388/fr) tu peux facilement faire le calcul (et trouver l'équivalent en .NET).


Calade
Messages postés
14741
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 décembre 2020
148
Bonjour,

Très rare comme besoin, car les écrans sont vraiment très différents.

Pour information, les TwipsPerPixel X et Y en VB6 retournent systématiquement 15 (où du moins c'est la seule valeur que j'ai vu)

Si je m'en réfère au message de Calade, cela donne 1440/15 soit 96 pixel par pouce.

Mon site
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Bonjour NHenry,

Effectivement j'avais aussi remarqué cette valeur de retour immuable de 15 !!!


Calade
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012

Je suis entrain d'optimiser ma prog ... et je me demandais s'il etait possible de simplifier ca ...

En fait sous VB 2008, j'utilise un MSchart (AxMSChart) et je souhaite afficher des msg lors du passage de la souris sur celui-ci.

J'utilise donc la sub xMSChart1_MouseMoveEvent qui renvoie une position en pixels couplée à la fonction AxMSChart1.TwipsToChartPart qui traite des Twips !!!!

Private Sub AxMSChart1_MouseMoveEvent(ByVal sender As Object, ByVal e As AxMSChart20Lib._DMSChartEvents_MouseMoveEvent) Handles AxMSChart1.MouseMoveEvent

Dim part As Integer
Dim index1 As Integer
Dim index2 As Integer
Dim index3 As Integer
Dim index4 As Integer

'Conversion Pixels -> Twips
'1 pouce nb_pixel_par_pouce 1440 twips
Dim X_twip
Dim Y_twip
X_twip = e.x * 1440 / nb_pixel_par_pouce_X
Y_twip = e.y * 1440 / nb_pixel_par_pouce_Y

AxMSChart1.TwipsToChartPart(X_twip, Y_twip, part, index1, index2, index3, index4)

AxMSChart1.TwipsToChartPart(X_twip, Y_twip, part, index1, index2, index3, index4)

'ATTENTION : Mettre allowSeriesSelection=false

'partie=0 -> Graphe entier - zone exterieur
'partie=1 -> Titre
'partie=3 -> Légende
'partie=4 -> Graphe - zone dessin
'partie=5 -> 1 série dans la légende
'partie=7 -> 1 série dans le graphe, index1 donne la colonne, index2 donne la ligne
'partie=9 -> 1 Axe
'partie=10 -> Echelle d'axe

......

Il faut donc convertir des pixels en Twips pour localiser la souris sur les différentes parties du graphe et afficher un msg en conséquence.

Je n'ai rien trouvé dans SystemParametersInfo, ni dans Screen etc ... poour obtenir directement le nb pixel/inch sans utiliser les API.

Plus simple d'utiliser un autre type de graphe(Office, Zgraph,...) ?

Merci quand-même de vos remarques.
Messages postés
14741
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 décembre 2020
148