2013-12-20 1 views
0

У меня есть приложение Firemonkey HD и разворачивайте его на iPad 2. Отлично работает.Почему форма не авто-размера для текущего разрешения?

Когда я развертываю то же приложение на iPad 4 с дисплеем Retina, у меня возникают проблемы.

Суть в том, что у меня есть некоторые операции рисования на форме и нужна точная ширина и высота формы.

ShowMessage('form wh = ' + FloatToStr(TForm(FImage.Parent.Parent). Width) + ':' + FloatToStr(TForm(FImage.Parent.Parent).Height)); 

на обоих устройствах я получаю сообщение:

form wh = 1024:748 

Что мне нужно, это автоматическое изменение размера формы.

Что мне делать, чтобы получить его?

UPDATE: Я стараюсь использовать Screen.Size.Width, но имеет Screen.Size.Width = 1024 на дисплее Retina. Что я делаю неправильно?

+0

Форма должна быть полный экран (авто-размеров, чтобы соответствовать экрану). Между сетчаткой и экраном без сетчатки размер будет таким же, это изменение масштаба. Можете ли вы описать проблему более подробно или включить образ проблемы? –

+0

Да, конечно. Форма - полный экран. Странная точка для меня - это Screen.Size.Width = 1024 и Screen.Size.Height = 768. Какие детали вы хотите получить. Я обеспечу их с удовольствием. – mad

+0

Поскольку форма является полноэкранным, это, очевидно, автоматическое определение размера. Какая проблема? Эта? http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_Layout_to_Adjust_Different_Form_Sizes_or_Orientations_%28iOS_and_Android%29 –

ответ

5

Что касается вашего «обновления», вам нужно учитывать разницу между количеством пикселей «устройства» и количеством «логических» пикселей. Как правило, дисплей «сетчатки» физически не больше, чем неретинальный (или, если это так, это не имеет никакого отношения к «сетчатке» как таковой) - вместо этого он имеет гораздо более высокое разрешение. Кроме того, точка этого более высокого разрешения не должна забивать больше элементов управления (представлений) в один и тот же физический размер экрана - это сделать дисплей более четким, менее «блочным».

Таким образом, количество логических пикселей - единиц, используемых для управления размером - не увеличивается только из-за отображения «сетчатки». Вот почему IFMXScreenService.GetScreenSize возвращает тот же результат с дисплеями «сетчатки» и «нерез». Однако IFMXScreenService имеет другой метод, GetScreenScale, что вы можете использовать, чтобы получить размер экрана в «Устройство» пикселей:

uses FMX.Platform; 

function GetScreenSizeInDevicePixels: TPointF; 
var 
    Service: IFMXScreenService; 
begin 
    Service := IFMXScreenService(
    TPlatformServices.Current.GetPlatformService(IFMXScreenService)); 
    Result := Service.GetScreenSize * Service.GetScreenScale; 
end; 
+0

Да, ваш путь с GetScreenScale() подходит для меня. Большое спасибо. – mad

 Смежные вопросы

  • Нет связанных вопросов^_^