Тема совершенно для меня новая. Один из клиентов просит сделать возможность масштабирования экрана, так как у него монитор с высоким разрешением Hi-DPI.
Кто-нибудь экспериментировал с настройками проекта "Использовать масштабирование LCL Hi-DPI", поддержка DPI в манифесте или такие настройки на формах, как DesignTimeDPI, Scaled, PixelsPerInch?.. Еще вижу в свойствах файла (через ОС Windows 10, свойства файла) можно включить масштабирование... С ходу не получилось настроить.
Масштабирование LCL, поддержка DPI
Модератор: Модераторы
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
А что там пробовать. Оно работает.
Из проблемных мест - только если ты используешь сохранение размеров экранных объектов между сеансами работы (например через наследника PropStorage). Вот тут всё начинает расползаться.
Мне пришлось для временно костыля даже дописать обработчик в RxIniPropStorage - чтобы он несохранял ширину и высоту компонентов на не стандартных DPI.
Из проблемных мест - только если ты используешь сохранение размеров экранных объектов между сеансами работы (например через наследника PropStorage). Вот тут всё начинает расползаться.
Мне пришлось для временно костыля даже дописать обработчик в RxIniPropStorage - чтобы он несохранял ширину и высоту компонентов на не стандартных DPI.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Ну что-то выставление галочек масштабирования в настройках проекта и главной формы не привело ни к каким изменениям. По поводу ProStorage: спасибо, буду иметь ввиду. Так-то IniPropStorage использую, но он не сохраняет положение и размер компонентов, только формы главного окна.
Да, и я имею ввиду Windows 10 и версия Lazarus 1.8.2, не транковая, может в этом дело
Да, и я имею ввиду Windows 10 и версия Lazarus 1.8.2, не транковая, может в этом дело
alexs писал(а): Оно работает.
С двумя мониторами не работает. Любое приложение валится при создании первой же формы.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
У меня кстати по сути работает, видимо. Просто я не могу это проверить непосредственно с обычным монитором. У клиента масштабирование все-таки происходит
Также столкнулся с проблемой - если "use LCL scaling", то сохраненные размеры формы и контролов умножаются на масштаб где-то внутри LCL, так что при каждом следующем запуске форма укрупняется.
Решил, что это всё-таки не баг в LCL, надо просто при сохранении пресчитывать размеры так:
iScaledWidth:=Self.ScaleFormToDesign(Self.Width);
iScaledHeight:=Self.ScaleFormToDesign(Self.Height);
и сохранять соответственно iScaledWidth и iScaledHeight. Всякие PropStorage отпадают таким образом (пока их не поправили).
Решил, что это всё-таки не баг в LCL, надо просто при сохранении пресчитывать размеры так:
iScaledWidth:=Self.ScaleFormToDesign(Self.Width);
iScaledHeight:=Self.ScaleFormToDesign(Self.Height);
и сохранять соответственно iScaledWidth и iScaledHeight. Всякие PropStorage отпадают таким образом (пока их не поправили).
