Bonjour,
Souhaitant dans une application adapter la taille et les caractères d'une fiche à la résolution de l'écran (autrement que par le DPI automatique de Windows 10 donnant un aspect "baveux" aux caractères), je pensais utiliser la propriété Screen.Monitors[x].PixelsPerInch de cet écran. Malheureusement il semble bien que la valeur retournée par cette propriété soit toujours celle de l'écran primaire, du moins sous Windows 10.
Pour tester les propriétés des écrans, créez une forme avec un bouton:
Sur mon portable ayant un écran primaire 15,6" 1920x1080 et un écran secondaire 21" 1680x1050 à droite aligné en bas,
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 procedure TForm1.Button1Click(Sender:TObject); var i:integer; s:String; begin s:=''; for i:=0 to Screen.MonitorCount-1 do begin with Screen.Monitors[i] do begin if i>0 then s:=s+LineEnding+LineEnding; s:=s+'Écran n°'+IntToStr(MonitorNum+1)+LineEnding; s:=s+' Primary '+BoolToStr(Primary,True)+LineEnding; s:=s+' PixelsPerInch '+IntToStr(PixelsPerInch)+LineEnding; s:=s+' Left '+IntToStr(Left)+LineEnding; s:=s+' Width '+IntToStr(Width)+LineEnding; s:=s+' Top '+IntToStr(Top)+LineEnding; s:=s+' Height '+IntToStr(Height); end; end; ShowMessage(s); end;
si les 2 écrans les paramètres d'affichage sont identiques (100% = 96DPI) j'obtiens les résultats suivants:
Seul le Top=27 m'étonne un peu (comme l'écran est aligné en bas, Top devrait être 1080-1050=30).
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 Écran n°1 Primary True PixelsPerInch 96 Left 0 Width 1920 Top 0 Height 1080 Écran n°2 Primary False PixelsPerInch 96 Left 1920 Width 1680 Top 27 Height 1050
Si je défini les propriétés de l'écran primaire sur 125% = 120 DPI comme recommandé (redémarrage obligatoire) sans modifier celle du secondaire j'obtiens:
On voit que toutes les propriétés de l'écran n°2 ont été multipliées par 120/96=1.25.
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 Écran n°1 Primary True PixelsPerInch 120 Left 0 Width 1920 Top 0 Height 1080 Écran n°2 Primary False PixelsPerInch 120 Left 2400 Width 2100 Top 34 Height 1313
Des tests effectués sur une autre configuration donnent des résultats similaires: le PixelsPerInch retourné pour l'écran secondaire est toujours identique à celui de l'écran primaire et les propriétés sont multipliées par le rapport des résolutions.
Je pensais à un problème Lazarus, mais un essai avec un logiciel Delphi 7 donne le même TopLeft (2400,34) que l'écran n°2 ci-dessus.
Est-ce un problème W10, Lazarus-D7 ou une erreur de compréhension de ma part?
André
Partager