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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2021, 07:41   #11
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от король смерти Посмотреть сообщение
Если можно, то объясните как исправить эту хр*нь.
C картинками у вас всё нормально.
Вам нужно подогнать размер главного окна и всех окон, элементов внутри.
К примеру у меня есть форма с кнопкой. Я создавал её для экрана FullHD 1920x1080, увеличения экрана нет, т.е. коэфф. DPI = 1
Для масштабирования на экранах, где включено увеличение я написал такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
PixPerInchX: Integer;
DeltaDPI: Real;
begin

PixPerInchX:=GetDeviceCaps(GetDC(0),LOGPIXELSX);
DeltaDPI:=PixPerInchX/96;
// Меняем размер всех окон и элементов внутри в зависимости от DPI

Form1.Width:= Round(Form1.Width * DeltaDPI);
Form1.Height:= Round(Form1.Height * DeltaDPI);
Button1.Width:= Round(Button1.Width * DeltaDPI);
Button1.Height:= Round(Button1.Height * DeltaDPI);

 // Для контроля DPI: может быть 1, 1,25, 1,5
ShowMessage('DeltaDPI = ' +  FloatToStr(DeltaDPI));

end;

end.
Т.е. размеры Формы и всех кнопок, лейбов, текстовых полей и т.п. умножаем на DeltaDPI
kvitaliy вне форума Ответить с цитированием
Старый 18.07.2021, 16:08   #12
король смерти
Пользователь
 
Регистрация: 17.06.2021
Сообщений: 17
По умолчанию

kvitaliy, спасибо
король смерти вне форума Ответить с цитированием
Старый 18.07.2021, 17:19   #13
король смерти
Пользователь
 
Регистрация: 17.06.2021
Сообщений: 17
По умолчанию

kvitaliy, вроде лучше не стало. может я что-то не так сделал?

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
PixPerInchX: Integer;
DeltaDPI: Real;
begin


PixPerInchX:=GetDeviceCaps(GetDC(0),LOGPIXELSX);
DeltaDPI:=PixPerInchX/96;
// Меняем размер всех окон и элементов внутри в зависимости от DPI

Form1.Width:= Round(Form1.Width * DeltaDPI);
Form1.Height:= Round(Form1.Height * DeltaDPI);

Image4.Width:= Round(Image4.Width * DeltaDPI);
Image4.Height:= Round(Image4.Height * DeltaDPI);

Image3.Width:= Round(Image3.Width * DeltaDPI);
Image3.Height:= Round(Image3.Height * DeltaDPI);

Image2.Width:= Round(Image2.Width * DeltaDPI);
Image2.Height:= Round(Image2.Height * DeltaDPI);

Image1.Width:= Round(Image1.Width * DeltaDPI);
Image1.Height:= Round(Image1.Height * DeltaDPI);

Image4.Picture.LoadFromFile('png\fon.png');

Image3.Picture.LoadFromFile('png\menu\close.png');
Image3.Left:=10;
Image3.Top:=149;

Image2.Picture.LoadFromFile('png\menu\new_game.png');
Image2.Left:=251;
Image2.Top:=66;

Image1.Picture.LoadFromFile('png\menu\prodol_game.png');
Image1.Left:=8;
Image1.Top:=66;
end;
Изображения
Тип файла: jpg fxD15FKCils.jpg (45.9 Кб, 24 просмотров)
король смерти вне форума Ответить с цитированием
Старый 18.07.2021, 17:26   #14
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

У вас на вашем компе чему равно DeltaDPI?
kvitaliy вне форума Ответить с цитированием
Старый 18.07.2021, 17:29   #15
король смерти
Пользователь
 
Регистрация: 17.06.2021
Сообщений: 17
По умолчанию

kvitaliy, у меня 1.25. Но у меня и так было все норм. Но вот у друга DeltaDPI = 1 и у него такая хрень и вот это я хочу исправить.
король смерти вне форума Ответить с цитированием
Старый 18.07.2021, 17:30   #16
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от король смерти Посмотреть сообщение
может я что-то не так сделал?
Почему только размер изображений? С изображениями то как раз всё нормально, все надписи надо корректировать.
kvitaliy вне форума Ответить с цитированием
Старый 18.07.2021, 17:33   #17
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от король смерти Посмотреть сообщение
Но вот у друга DeltaDPI = 1 и у него такая хрень и вот это я хочу исправить.
Написал же, вы должны делать программу при Dpi =1. А программа подстраивается под другие увеличения.
kvitaliy вне форума Ответить с цитированием
Старый 18.07.2021, 17:51   #18
король смерти
Пользователь
 
Регистрация: 17.06.2021
Сообщений: 17
По умолчанию

kvitaliy, сделал на Dpi = 1 запустил все норм, сохранил. Поменял на Dpi =1,25 запустил exe. И вот результат.
Изображения
Тип файла: png Screenshot_1.png (14.5 Кб, 0 просмотров)
король смерти вне форума Ответить с цитированием
Старый 18.07.2021, 21:17   #19
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от король смерти Посмотреть сообщение
И вот результат.
Нормальный результат.
Нужно не только расположение надписей и размеры тоже корректировать на этот же коэффициент, но и изображения.
Там у вас Label или что? Left, Top как указано, как и у изображений, явно? Все линейные размеры нужно корректировать.
kvitaliy вне форума Ответить с цитированием
Старый 18.07.2021, 23:08   #20
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

король смерти, рискну предположить, что надписи "Продолжить", "Новая игра", "Выход из игры" у Вас не нарисованы на соответствующих картинках-кнопках оранжевого и красного цвета. Возможно, надо нарисовать на соответствующих картинках-кнопках оранжевого и красного цвета надписи "Продолжить", "Новая игра", "Выход из игры", а затем соорудить соответствующие обработчики для этих картинок-кнопок. В противном случае рисунки и надписи совмещать очень сложно: при измерении разрешения экрана они обязательно "слетят". Успехов!
Viktor61 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как это возможно komra2 Операционные системы общие вопросы 2 07.05.2016 01:29
Обьясните пожалуста как и что делает эта программа и почему она это делает. Dimka-novitsek Общие вопросы C/C++ 7 16.10.2013 12:02
Обьясните как работает это программа(VBA) Desyat Помощь студентам 1 28.12.2011 08:59
Обьясните как решается это уровнения sektor2011 Помощь студентам 3 27.01.2011 18:54
Возможно вы знаете как исправить это RockyNV Компьютерное железо 3 31.05.2010 19:26