Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2022, 19:33   #1
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Вопрос Как запретить/использовать изменение масштаба шрифтов и компонентов в Win 7, 10 (RAD 10.4.1)

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

В инете ничего путного по этой теме не нашлось (по крайней мере пока). Я делаю аккуратное расположение элементов, а при увеличении масштаба до 200% в Windows 10 все перекашивает (в частности TLabel-ы съезжают и в них текст налезает во много строчек сам на себя). Как получить значение масштаба, выбранного в системе? И как корректно оперировать с этим параметром? В инете накопал - люди экспериментируют с DPI/PPI... И каким-то волшебным параметром ScaleBy. Help!
hexor_boo вне форума Ответить с цитированием
Старый 29.06.2022, 22:26   #2
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Радость

Узнать текущий PPI:
Код:
Screen.PixelsPerInch
причем так, что:
100% масштаба = 96 PPI
125% масштаба = 120 PPI
150% масштаба = 144 PPI
200% масштаба = 192 PPI

Небольшое затруднение создает тот факт, что пользователь может выбрать и другие значения с точностью до 1% масштаба - тогда PPI будет какой-то другой, а с этими 4-мя стандартными значениями вполне можно сделать так:
Код:
currentPPI:=Screen.PixelsPerInch;
 Case currentPPI Of
  96 : CallProc1;
  120 : CallProc2;
  144 : CallProc3;
  192 : CallProc4;
 End;
где CallProc1, CallProc2, CallProc3, CallProc4 - процедуры, в которых жестко перезадается размер элементов управления под каждый конкретный масштаб

Последний раз редактировалось hexor_boo; 29.06.2022 в 22:34.
hexor_boo вне форума Ответить с цитированием
Старый 29.06.2022, 23:03   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Ну а дальше посчитайте 96PPI * 1.25 = 120PPI; 96PPI * 1.5 = 144PPI; 96PPI * 2 = 192 PPI тогда 175% -> 96PPI * 1.75 = 168PPI и 1% -> 96PPI * 0.01 = 1PPI (округление 0.96PPI)
Но вести вычисления придется в этих нерусских дюймах. Лучше перейти к миллиметрам или сантиметрам.
macomics вне форума Ответить с цитированием
Старый 30.06.2022, 00:40   #4
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Радость

2 macomics, так это сразу понятно, что 1% = 0,96 PPI. Пока не вижу огромного смысла просчитывать варианты кроме 100%, 125%, 150% и 200%, потому что за счет этого округления до 1PPI будут сильно искажаться размеры и координаты элементов управления для которых расчет этих параметров будет сделан через формулу с PPI
hexor_boo вне форума Ответить с цитированием
Старый 30.06.2022, 00:53   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Не более +/-1 пикселя.
Вы же не складываете 96 из 1 PPI, а выполняете 96 * 1 / 100 = 0, 96 в остатке. Если в остатке больше 47, тогда прибавляете 1 к делимому. В результате получаете погрешность в 1 пиксель на дюйм. Учитывая то, что вывод производится в пикселях, тогда ваша погрешность не будет иметь большого значения.

Дальше ваши вычисления в пикселях надо перевести в дюймы (но мне предпочтительнее миллиметры: умножаете на 127 и делите на 5). И все получится.

Последний раз редактировалось macomics; 30.06.2022 в 00:56.
macomics вне форума Ответить с цитированием
Старый 30.06.2022, 02:42   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Оставь надежду всяк, кто этого захотел.
Общего решения для формирования окна программы при всех возможных разрешениях и размерах не существует и не может существовать!
А запрещать пользователю что-либо делать это ну очень не кошерно.
northener вне форума Ответить с цитированием
Старый 30.06.2022, 03:09   #7
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Не более +/-1 пикселя.
Вы же не складываете 96 из 1 PPI, а выполняете 96 * 1 / 100 = 0, 96 в остатке. Если в остатке больше 47, тогда прибавляете 1 к делимому. В результате получаете погрешность в 1 пиксель на дюйм. Учитывая то, что вывод производится в пикселях, тогда ваша погрешность не будет иметь большого значения.

Дальше ваши вычисления в пикселях надо перевести в дюймы (но мне предпочтительнее миллиметры: умножаете на 127 и делите на 5). И все получится.
Это какой-то суровый мозговой трэш) Я придумал! Если пользователь выбрал масштаб >100% и <125%, то выводить элементы с расположением и размерами как при 125%, если выбран масшьаб >125% и <150%, то выводить элементы как при 150% и т.д. Появится лишнее пространство - это да, а в целом можно посмотреть, что получится. В любом случае текст в TLabel-ах перестанет выводиться с наложением. Благодарю за формулу перевода дюймов в миллиметры!
hexor_boo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
image изменение масштаба _Санек_ Общие вопросы Delphi 1 27.09.2015 16:42
Изменение масштаба сайта far1towi4 HTML и CSS 6 11.06.2013 12:29
Изменение масштаба листа ScrollBar ольгаг Microsoft Office Excel 5 26.06.2012 12:35
Изменение масштаба BaRSyk174 Общие вопросы Delphi 3 30.11.2009 17:12
изменение масштаба ruavia3 Microsoft Office Excel 1 30.07.2009 09:20