Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как не допустить изменения размера компонента при изменении DPI?

30.12.2019, 15:16. Показов 4826. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.

Разработка проекта ведётся при нормальном DPI (96).
Компонент TStaticText имеет при этом размеры 114x41 пкс. Форма занимает весь рабочий стол без панели задач.
Меняем DPI на 120 c перезагрузкой.
Теперь размер этого компонента стал 143х52.
На форме расположено несколько десятков подобных компонентов.
Разумеется при увеличении DPI они просто не умещаются в отображаемом пространстве.
Привязывать их используя свойство Anchors? - но ведь это свойство управляет только относительным размещением компонентов, а не их размерами. Есть ли способ не трогать размеры компонентов в пикселях независимо от того какое пользователь выбрал DPI в своей системе?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.12.2019, 15:16
Ответы с готовыми решениями:

Как передвинуть компоненты на форме при изменении размера одного компонента
На форму положил компонент TListBox (Align=Left), к нему прилепил TSplitter (Align=Left). Это я сделал для того, чтобы можно было мышкой...

Запрет изменения размера формы и элементов при изменении шрифта и его размера
Здравствуйте. К слову вопрос название темы. А именно как запретить изменять размер формы и элементов при изменении шрифта Изменить...

Как запретить масштабирование контролов на форме при изменении dpi экрана?
Всем здравствуйте. Речь об отсутствующем свойстве Scaled у форм студии. (В Delphi эта проблема решается именно так). Можно ли добиться...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,851
Записей в блоге: 12
30.12.2019, 16:50
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Нашел вот такое:
If some of your components don't scale their inner sizes, override DoAutoAdjustLayout and scale the sizes (see TToolBar) - it has to be done for all controls
, и подумал, что можно попробовать отыграть в обратную сторону: перегрузить метод DoAutoAdjustLayout для нужного класса, и поработать с ним, чтобы НЕ масштабировать размеры.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
30.12.2019, 17:36  [ТС]
volvo, статью про DPI я прочитал, но добится того, что там написано не смог. Как перегрузить DoAutoAdjustLayout не знаю. Вот картинка на ней одно и то же приложение с 96 dpi и 120 dpi. Нужно чтобы содержимое формы было одинаковым.
Миниатюры
Как не допустить изменения размера компонента при изменении DPI?  
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
31.12.2019, 02:27
Цитата Сообщение от volvo Посмотреть сообщение
Нашел вот такое:
Очень сомнительно что что-такое или подобное легко написать в общем случае.
1
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,343
05.01.2020, 22:03
эээ, так вроде в этом и есть смысл DPI aware программ, на больших DPI размеры контролов увеличиваются пропорционально увеличению этого самого DPI или я не прав?

Если нужно иметь одинаковый размер в не зависимости от DPI - надо, имхо, просто отключить этот механизм в настройках проекта или где оно там включается?
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
06.01.2020, 07:26  [ТС]
Цитата Сообщение от Kitayets Посмотреть сообщение
отключить этот механизм в настройках проекта
а где?
0
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,343
07.01.2020, 08:43
вот тут все расписано по этой теме на русском:
https://wiki.freepascal.org/High_DPI/ru
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.01.2020, 19:54  [ТС]
Kitayets, я об этой ссылке знал. Дело в том что ничего у меня не получилось так как там описано. Видимо неточный перевод. Если не затруднит создайте проект, бросьте на форму метку, внесите необходимые изменения чтобы я запуская приложение при различных DPI имел одинаковый шрифт метки. У меня не получилось.
0
5945 / 4521 / 1094
Регистрация: 29.08.2013
Сообщений: 28,101
Записей в блоге: 3
08.01.2020, 21:19
Цитата Сообщение от jkrnd Посмотреть сообщение
у меня не получилось так как там описано
High DPI в Lazarus 1.8 и выше
Для обработки High DPI с использованием новых функций в 1.8, выполните следующие действия:

На Windows: включите поддержку DPI в разделе Project Options(Параметры проекта) -> Application (Приложение). Определитесь, хотите ли вы поддерживать DPI каждого монитора или нет.
Включите масштабирование LCL для поддержки DPI вашей программы в Project Options(Параметры проекта) -> Application(Приложение) -> Use LCL scaling (Hi-DPI) (Использовать масштабирование LCL (Hi-DPI)).
Установите TForm.Scaled=True для всех ваших форм (это будет значение по умолчанию). Все WYSIWYG-эффекты должны работать автоматически. Также дизайнер соответственно масштабирует формы.
Если вы создаете элементы управления во время выполнения, отмасштабируйте все координаты, размеры и т.д., которые должны учитывать DPI, с помощью TControl.Scale96ToForm() или ScaleDesignToForm() (в зависимости от выбранного вами PPI по умолчанию) или подготовьте свой контейнер (например, панель с элементами управления) как это было с 96 PPI, а затем вызовите TControl.AutoAdjustLayout(lapAutoAdjustF orDPI, 96, ParentFormOfTheContainer.PixelsPerInch, 0, 0);
Если некоторые из ваших компонентов не масштабируют свои внутренние размеры, переопределите DoAutoAdjustLayout и отмасштабируйте размеры (см. TToolBar) - это должно быть сделано для всех элементов управления. Если элемент управления LCL пропускает DoAutoAdjustLayout, сообщите об этом в mantis(багтрекер) и предоставьте исправление, если можете.
что именно не получилось?

Не по теме:

Цитата Сообщение от jkrnd Посмотреть сообщение
создайте проект, бросьте на форму метку, внесите необходимые изменения
надо вам, а делать должен кто-то другой))

1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.01.2020, 06:57  [ТС]
qwertehok, Спасибо. Всё получилось.

Не по теме:

Я не из-за лени, просто отчаялся добиться нужного результата, вот и предложил создать проект.

0
5945 / 4521 / 1094
Регистрация: 29.08.2013
Сообщений: 28,101
Записей в блоге: 3
09.01.2020, 17:59
Цитата Сообщение от jkrnd Посмотреть сообщение
Всё получилось.
а теперь напишите сюда что делали - другой новичек придет и только спасибо скажет
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
15.01.2020, 17:05  [ТС]
qwertehok, Установил свойство формы Scaled в False. Всего-навсего. И чудо произошло. Проделал это для многих своих программ на C++Builder (там тоже есть такое свойство).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2020, 17:05
Помогаю со студенческими работами здесь

При изменении масштаба (dpi) разбегаются метки
Настройка меток одинаковая, выставлял при масштабе экрана раб стола 100%,при 125 метки начинают убегать. Text align middle right, image...

Qml изменение размера Canvas при изменении размера окна
Может есть какой нибудь способ, чтобы при изменении размера окна (в моем случае window) изменялся размер рисунка Canvas (увеличивался или...

Изменение размера обьектов при изменении размера графического окна
Можно ли в pascalABC.net сделать следующее: чтобы приизменении размера графического окна изменялись и размеры обьектов.Зарание спасибо:-|

Пропорциональное изменение размера tabControl1 при изменении размера формы
Всем hello. Посоветуйте, что сделать. На форме есть компоненты, делаю, чтобы при изменении размера формы элементы притягивались к краям...

Изменение размера UserControl при изменении размера элемента на нем
Здравствуйте. У меня на UserControl находится TextBox. Выполняю построение. В конструкторе переношу мой UserControl на форму. Меняю в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru