Autor Téma: Změna DPI na monitoru  (Přečteno 318 krát)

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Změna DPI na monitoru
« kdy: 28-05-2019, 13:27:39 »
Ahoj
mám jednoduchý dotaz, uživatel změnil na monitoru velikost textu ze 100% na 125% a neudělal restart, ani se neodhlásil. Screen.PixelsPerInch na změnu nereaguje, pořád drží 96.
Je možné ho nějak donutit, nebo změnu nějak zachytit přímo či skrz event na Screen? Díky za případnou radu.

Offline našinec

  • Hrdina
  • ****
  • Příspěvků: 412
  • Karma: 5
Re:Změna DPI na monitoru
« Odpověď #1 kdy: 28-05-2019, 14:53:15 »
A co třeba: HKCU:\Control Panel\Desktop\WindowMetrics -Název AppliedDPI ?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #3 kdy: 29-05-2019, 12:15:46 »
Úplně přesně nerozumím.
Abych mohl změnu DPI chytit, musí aplikace běžet, ne? No, ale v okamžiku změny aplikace neběží, uživatel se po změně neodhlásil ani nerestartoval W10.
Pro HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI nepoznám, na jakém monitoru to nastalo :(
nebo se to zjišťuje nějak jinak?

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 754
  • Karma: 42
    • Verze Delphi: 10.3
Re:Změna DPI na monitoru
« Odpověď #4 kdy: 29-05-2019, 13:15:13 »
A u formuláře self.Monitor.PixelsPerInch vrací také původní hodnotu?

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #5 kdy: 29-05-2019, 13:20:47 »
To už je ale test, kdy je alespoň jeden formulář aktivní - sice se mi zaktivní, ale se špatnými rozměry podle screens

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 754
  • Karma: 42
    • Verze Delphi: 10.3
Re:Změna DPI na monitoru
« Odpověď #6 kdy: 29-05-2019, 13:24:26 »
Verze 10.3 v Project, Options, Manifest umožňuje zapnout DPI Awareness, máš to tam taky a zapnuté?

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #7 kdy: 29-05-2019, 14:20:34 »
Dělám to v Seattle

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2586
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Změna DPI na monitoru
« Odpověď #8 kdy: 29-05-2019, 14:29:11 »
Abych mohl změnu DPI chytit, musí aplikace běžet, ne? No, ale v okamžiku změny aplikace neběží, uživatel se po změně neodhlásil ani nerestartoval W10.
Hm, i ted po precteni dotazu ho chapu tak, ze se jedna o stav v run-time :-O

Protoze kdyz aplikace nebezi, tak by se mel kazdy formular pri jeho konstrukci z .DFM DPI prizpusobit a zadnou event k tomu nepotrebuje. Porad se to dela v TCustomForm.Loadstate(), drive ten scaling pocitali s hodnot ulozenych v design time v .DFM a skutecneho nastaveni obrazovky, ted to asi taky delaji, ale buhvi jak a nechce se mi to studovat. Vim, ze zejmena na notebookach byvali s nekterymi nastavenimi DPI problemy. Ale HOSIP, budes si to musel vyhledat o co presne slo a jak to ti ev. lide resili

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #9 kdy: 29-05-2019, 14:42:25 »
Omlouvám se, i Seattle má option High-DPI.
Interní procedury aplikace pro přizpůsobení rozměrů používají Screen.PixelsPerInch, který se po změně do odhlášení/restartu ani nehne.
To mě vedlo ke zvrácené myšlence, nahradit údaj z Screen.PixelsPerInch za jiný, získaný jinak, aby se mohly přeskupit obrazce na formuláři v závislosti na velikostech textů.
A teď jde o to "jak jinak".

** ale tohle Self.Monitor.PixelsPerInch vypadá, že funguje **
« Poslední změna: 29-05-2019, 14:47:23 od JaroB »

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #10 kdy: 29-05-2019, 15:08:23 »
A jen poznámka na okraj, pokud je každý monitor s jiným DPI, tak při přetahování okna přes monitory selhává :(

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 754
  • Karma: 42
    • Verze Delphi: 10.3
Re:Změna DPI na monitoru
« Odpověď #11 kdy: 29-05-2019, 15:10:35 »
A jen poznámka na okraj, pokud je každý monitor s jiným DPI, tak při přetahování okna přes monitory selhává :(

Na tom právě hodně zapracovali v novějších verzích.
Když jsem prvně viděl, že se přetažený VCL formulář sám upraví pro dpi druhého monitoru, nevěřil jsem vlastním očím :-)

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 957
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Změna DPI na monitoru
« Odpověď #12 kdy: 29-05-2019, 15:13:11 »
No, v Seattle to asi nejde :(