En utilisant C++ Builder v. 10.2.3, je veux centrer un TForm qui est redimensionné. Pour ce faire, j'utilise les valeurs TScreen::WorkArea. Cependant, en exécutant le programme sur un système avec une mise à l'échelle de 125% sous Windows 10, le code ne fonctionne pas correctement, car le TForm est mis à l'échelle. Comment puis-je déterminer si une telle mise à l'échelle se produit, puis ajuster en conséquence? Existe-t-il une fonctionnalité intégrée dans FireMonkey pour cela? Je devrais noter qu'avec une mise à l'échelle > 100% dans Windows 10, les valeurs TForm::TPosition ne semblent pas fonctionner correctement - par exemple, en le réglant sur ScreenCenter semble avoir un problème similaire, où il n'est pas réellement centré.
Réponses
Trop de publicités?Cette fonction retournera l'échelle de l'écran, c'est-à-dire 1.25 si vous utilisez un scaling de 125% sur Windows:
function GetScreenScale: Single;
var ScreenService: IFMXScreenService;
begin
Result := 1;
if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
Result := ScreenService.GetScreenScale;
end;
Notez que sur Mac, les seules échelles d'écran possibles sont 1.0 (non-retina) et 2.0 (retina). Cependant, sur Mac, les valeurs retournées par TScreen sont déjà mises à l'échelle, donc aucune correction n'est nécessaire.
Anthony Burg
Points
282