2014-01-08 1 views
7

Я думал, что масштабирование приложения в FireMonkey должно быть простым, так как оно должно работать с Retina-Mac. Кажется, есть некоторая фоновая магия, которая выбирает другой стиль, чем, но это не похоже на Windows.Масштаб Delphi Firemonkey для высоких окон DPI

В VCL был TForm.Scaled, который выполняет эту работу (более или менее).

Для FireMonkey я нашел это Article by Embarcadero, но похоже, что Embarcadero не совсем уверен, полезен ли этот подход, как в XE5, образец проекта «ControlsDemo» больше не содержит шейдер масштаба. Это также требует наличия root-TLayout во всех формах, для которых может быть установлен масштабный коэффициент. У меня нет такого элемента в моих формах (и я боюсь добавить его, поскольку я не могу быть уверен, что я запускаю еще одну ошибку firemonkey, чем).

Как я могу объяснить различные настройки DPI с помощью FireMonkey?

Редактировать: Я пробовал взломать TPlatFormWin и установить CurrentScreenScale на 2, но он не работает: у меня есть черные панели инструментов, но нет масштабирования, но по крайней мере он использовал альтернативу HighRes из предоставленного TImage.MultiResBitmap.

+0

Итак, у вас есть монитор с высоким разрешением на дюйм или вы пытаетесь имитировать на обычном 96-dpi дисплее? –

+1

Оба ;-) У меня есть HighDPI Windows Tablet и имитирую на ПК с помощью настроек шрифта. –

+2

Увы, но векторные стили, упомянутые в этой статье, были заменены растровыми в XE3 (или точнее: стили «платформы» теперь основаны на растровых изображениях). Таким образом, дисплеи «сетчатки» теперь поддерживаются путем включения * двух * наборов стилей растрового изображения Mac, а не независимости от независимого разрешения самого формата стиля. Тем не менее, если вы в порядке с пользовательским стилем, попробовали ли вы один из пользовательских стилей, поставляемых вместе с продуктом? Большинство из них по-прежнему основаны на ИЦП. –

ответ

0

U может сделать что-то вроде этого, чтобы изменить корневой TLayout:

с 100 по-умолчанию

if windowsscale>0 then begin 
    LayoutScale.height:=ClientHeight*100/windowsscale; 
    LayoutScale.Width :=Clientwidth*100/windowsscale; 
    LayoutScale.Scale.X:=windowsscale/100; 
    LayoutScale.Scale.Y:=windowsscale/100; 
end; 
0

Если кто-то читает это ... мой опыт работы с рабочего стола Windows, FireMonkey является то, что вы должны позаботьтесь о настройке ОС DPI вручную, и все в порядке, чтобы поместить свои элементы управления в верхний контейнер (TLayout), размер которого установлен в соответствии с настройками DPI OS OS (определяется с помощью кода низкого уровня). Однако есть случаи, когда вам нужно отменить это масштабирование - например, Viewport3D должен быть уменьшен назад 1/X, чтобы правильно отображать внутри расширенного контейнера. В противном случае будут показаны артефакты уровня пикселей, качество изображения будет ужасным. Эта технология увеличения масштаба/масштабирования работает красиво.