Windows 10 "Per Monitor v2" podpora a lepší podpora Hi-DPI

vložil Radek Červinka 8. ledna 2019 00:08

S verzi Delphi 10.3 Rio dochází k podpoře Windows 10 “Per Monitor v2”. Nové API řeší problém, kdy dříve nebylo možné získat informace o velikosti elementů pro různé monitory (jako třeba scrollbary), ale šlo to pouze pro primární monitor.

Co to znamená pro kompatibilitu?

Per Monitor Delphi

Pokud to zapnete a máte Windows 10 build 1703 “Creators Update” (z 5.4.2017) tak Vaše aplikace bude podporovat nové API a podle monitoru bude reagovat na DPI. Pokud podmínky nesplňujete, Vaše aplikace bude fungovat stejně.

Jak je to možné?

Win 10 Creator Update přidává novou API funkci GetSystemMetricsForDPI. Aby se nová API dala bez problémů používat i jinde tak ji Delphi v RTL zapouzdřuje.

VCL.Controls
function GetSystemMetricsForWindow(nIndex: Integer; AHandle: HWnd): Integer;
begin
  if CheckPerMonitorV2SupportForWindow(AHandle)
  then
    Result := WinApi.Windows.GetSystemMetricsForDPI(nIndex, GetDPIForWindow(AHandle))
  else
    Result := WinApi.Windows.GetSystemMetrics(nIndex);
end;

function TControl.GetSystemMetrics(nIndex: Integer): Integer;
begin
  Result := GetSystemMetricsForWindow(nIndex, GetAllocatedWindowHandle);
end;

Nová RTL funkce GetSystemMetricsForWindow funguje tak, že na Win10 Creator Update volá novou funkci, kdežto na starších OS klasickou funkci GetSystemMetrics, která byla dříve využívána pro zjišťování elementů. Následně drobným trikem, tj. přidáním metody TControl.GetSystemMetrics je vyřešen problém se stávajícím kódem, kdy dříve napsaný kód volal API GetSystemMetrics (bez reference jednotky), nyní po rekompilaci místo toho bude volat novou metodu, která jak je vidět volá novou RTL funkci. Prostou rekompilací tedy dosáhneme podpory Per Monitor V2 bez ztráty kytičky.

procedure TForm11.Button1Click(Sender: TObject);
begin
  ShowMessage(GetSystemMetrics(SM_cxVSCROLL).ToString);
end;

Jen doplnění, MS už dávno přestal podporovat MDI rozhraní a opravovat v něm chyby, proto všechny Hi-DPI funkce nepodporují MDI.

Tagy:

Novinky v Delphi

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců