Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как в программе определить физические размеры экрана устройства?


Viacheslav

Вопрос

Как в программе определить физические размеры экрана устройства? Это необходимо для корректного масштабирования элементов управления под пальцевое управление. В этой теме информация только про разрешение в пикселях, но нет ничего про физические размеры экрана (в метрах/миллиметрах/дюймах) или dpi.

 

Если нет универсального способа, то подскажите хотя бы платформозависимые для iOS и Android.

 

Для iPhone определить размеры экрана хоть как-то можно по размеру экрана в пискелях. Их всего несколько вариантов. Хотя это решение не поддерживает будущих устройств. А что делать с Android?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

DPI для Android

 
uses
  FMX.Helpers.Android, Androidapi.JNI.Util;

procedure TForm1.Button1Click(Sender: TObject);
var
  Disp: JDisplayMetrics;
  NativeClientHeight, NativeClientWidth: Single;
begin
   Disp := GetJDisplayMetrics;
   NativeClientWidth := ClientWidth * Disp.density;
   NativeClientHeight := ClientHeight * Disp.density;
   //Label1.Text := 'Width: ' + FloatToStr(NativeClientWidth);
   //Label2.Text := 'Height: ' + FloatToStr(NativeClientHeight);
   Label1.Text := FloatToStr( Disp.xdpi );
   Label2.Text := FloatToStr( Disp.ydpi );
   Label3.Text := IntToStr( Disp.densityDpi );
end;

 
Для IOS облом, рассчитывай сам http://www.dpi.nu/http://www.sven.de/dpi/http://www.pxcalc.com/http://www.pixelcalculator.com/ и т.п.
Ссылка на комментарий
  • 0

Доброго времени суток.

Аналогичная проблема: ругается на Disp := GetJDisplayMetrics в XE8. Просьба помочь, кто обладает информацией на сей счет, или как еще можно определить кол-во пикселей на единицу, дабы рассчитать физ. размер экрана в этих самых единицах?

Ссылка на комментарий
  • 0
В 26.05.2014 в 16:02, estra сказал:

DPI для Android

 

uses
  FMX.Helpers.Android, Androidapi.JNI.Util;

procedure TForm1.Button1Click(Sender: TObject);
var
  Disp: JDisplayMetrics;
  NativeClientHeight, NativeClientWidth: Single;
begin
   Disp := GetJDisplayMetrics;
   NativeClientWidth := ClientWidth * Disp.density;
   NativeClientHeight := ClientHeight * Disp.density;
   //Label1.Text := 'Width: ' + FloatToStr(NativeClientWidth);
   //Label2.Text := 'Height: ' + FloatToStr(NativeClientHeight);
   Label1.Text := FloatToStr( Disp.xdpi );
   Label2.Text := FloatToStr( Disp.ydpi );
   Label3.Text := IntToStr( Disp.densityDpi );
end;
 
Для IOS облом, рассчитывай сам http://www.dpi.nu/http://www.sven.de/dpi/http://www.pxcalc.com/http://www.pixelcalculator.com/ и т.п.

у меня тоже ругается на строчку Disp := GetJDisplayMetrics.

Ссылка на комментарий
  • 0
Android/iOS
var
   clientScreenScale   : Single;
   clientScreenSize    : TSize;
   clientScreenService : IFMXScreenService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(clientScreenService)) then
    clientScreenScale := clientScreenService.GetScreenScale
  else
    clientScreenScale := 1;

  // The display device's width:
  clientScreenSize.CX := Round(clientScreenService.GetScreenSize.X * clientScreenScale);
  // The display device's height:
  clientScreenSize.CY := Round(clientScreenService.GetScreenSize.Y * clientScreenScale);
end;

 

Изменено пользователем ENERGY
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...