Масштабирование LCL, поддержка DPI

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Масштабирование LCL, поддержка DPI

Сообщение Ichthyander » 03.04.2018 11:49:42

Тема совершенно для меня новая. Один из клиентов просит сделать возможность масштабирования экрана, так как у него монитор с высоким разрешением Hi-DPI.
Кто-нибудь экспериментировал с настройками проекта "Использовать масштабирование LCL Hi-DPI", поддержка DPI в манифесте или такие настройки на формах, как DesignTimeDPI, Scaled, PixelsPerInch?.. Еще вижу в свойствах файла (через ОС Windows 10, свойства файла) можно включить масштабирование... С ходу не получилось настроить.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Масштабирование LCL, поддержка DPI

Сообщение alexs » 03.04.2018 11:54:03

А что там пробовать. Оно работает.
Из проблемных мест - только если ты используешь сохранение размеров экранных объектов между сеансами работы (например через наследника PropStorage). Вот тут всё начинает расползаться.
Мне пришлось для временно костыля даже дописать обработчик в RxIniPropStorage - чтобы он несохранял ширину и высоту компонентов на не стандартных DPI.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Масштабирование LCL, поддержка DPI

Сообщение Ichthyander » 03.04.2018 12:40:18

Ну что-то выставление галочек масштабирования в настройках проекта и главной формы не привело ни к каким изменениям. По поводу ProStorage: спасибо, буду иметь ввиду. Так-то IniPropStorage использую, но он не сохраняет положение и размер компонентов, только формы главного окна.
Да, и я имею ввиду Windows 10 и версия Lazarus 1.8.2, не транковая, может в этом дело
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Масштабирование LCL, поддержка DPI

Сообщение wadman » 03.04.2018 17:21:15

alexs писал(а): Оно работает.

С двумя мониторами не работает. Любое приложение валится при создании первой же формы.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: Масштабирование LCL, поддержка DPI

Сообщение alexs » 04.04.2018 10:52:24

Специально проверил. Работает
В 7-ке поставил коэф-т масштабирования 125%
2 монитора
Лазарь стартует нормально
Программу сделал - запустил. Всё норм.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Масштабирование LCL, поддержка DPI

Сообщение Ichthyander » 04.04.2018 15:34:08

У меня кстати по сути работает, видимо. Просто я не могу это проверить непосредственно с обычным монитором. У клиента масштабирование все-таки происходит
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Масштабирование LCL, поддержка DPI

Сообщение Kon.pasc » 06.07.2018 18:32:36

Также столкнулся с проблемой - если "use LCL scaling", то сохраненные размеры формы и контролов умножаются на масштаб где-то внутри LCL, так что при каждом следующем запуске форма укрупняется.
Решил, что это всё-таки не баг в LCL, надо просто при сохранении пресчитывать размеры так:
iScaledWidth:=Self.ScaleFormToDesign(Self.Width);
iScaledHeight:=Self.ScaleFormToDesign(Self.Height);
и сохранять соответственно iScaledWidth и iScaledHeight. Всякие PropStorage отпадают таким образом (пока их не поправили).
Kon.pasc
новенький
 
Сообщения: 26
Зарегистрирован: 31.10.2009 17:45:38


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 39

Рейтинг@Mail.ru