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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2017, 09:38   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию Масштабирование программы для разных экранов

Вот возникла такая задача.
есть программа в основной форме которой много меток, фреймов, таблиц по разным листам PageControl. всё хорошо работает. но программа делалась под разрешение 1024*768 (размер окна главной формы 800*600). в те лет 5 назад про широкоформатный монитор не думали. вот тут начальство обновило себе компы и воткнуло разрешение на них 1920x1080. и говорит что мелкая программа не видно в ней ничего без очков... вопрос как можно сделать увеличение без глобального переписывания программы.? в винде например можно тему с крупными шрифтами поставить, но это решение не подходит так как меняет весь рабочий стол и "портит всю красоту". можно ли как нибудь к существующему проекту прикрутить тему с большими шрифтами, без изменения всей темы винды? (винда 7 или выше в редакции проф.)
Изображения
Тип файла: jpg Безымянный.jpg (92.6 Кб, 128 просмотров)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 10.02.2017, 10:25   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На счет прикрутить тему не в курсе. А без глобального переписывания поиграться со свойством PixelsPerInch формы, увеличив его.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2017, 14:02   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Универсальные способы получить ответ:
- воспользоваться поиском;
- просмотреть темы, указанные в самом низу этой страницы...
kropotkina-alice вне форума Ответить с цитированием
Старый 10.02.2017, 14:45   #4
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Универсальные способы получить ответ:
- воспользоваться поиском;
- просмотреть темы, указанные в самом низу этой страницы...
и пример запроса конечно не приложил... или я не заметил?

сейчас пытаюсь понять PixelsPerInch и всё что с ним связано.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 10.02.2017, 15:41   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
и пример запроса конечно не приложил... или я не заметил?
Запрос простецкий - "масштабирование"
kropotkina-alice вне форума Ответить с цитированием
Старый 10.02.2017, 19:36   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Форма при нормальном разрешении и эта же форма при том же разрешении, но с крупным шрифтом. Вернее увеличен размер фонтов. Ну и пересчитаны размеры и положение
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Width:= Round(Width*1.25);
  Height:= Round(Height*1.25);
  ScaleBy(120,96);
end;
PixelsPerInch-ом в такой ситуации не добиться. На сложной форме скорее всего останутся огрехи
Изображения
Тип файла: jpg Безымянный100.jpg (9.6 Кб, 79 просмотров)
Тип файла: jpg Безымянный101.jpg (11.4 Кб, 102 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.02.2017 в 19:45.
Аватар вне форума Ответить с цитированием
Старый 12.02.2017, 02:37   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
сейчас пытаюсь понять PixelsPerInch и всё что с ним связано.
А что тут понимать, если уже
Цитата:
Сообщение от IliaIT Посмотреть сообщение
в винде например можно тему с крупными шрифтами поставить, но это решение не подходит так как меняет весь рабочий стол и "портит всю красоту".
Имхо, не переписывая программу ничего "красиво" не получится.
northener вне форума Ответить с цитированием
Старый 13.02.2017, 09:51   #8
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

хмм. это я вирус где-то хапнул или всё же каспер не любит PixelsPerInch?
Изображения
Тип файла: jpg dbhm.jpg (101.9 Кб, 59 просмотров)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 15.02.2017, 10:35   #9
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Для масштабирования достаточно было, увеличивать размеры сторон не надо. в картинках аутосайз убрать(false), скале поставить (true). в таблицах у меня пришлось немного переделывать. но это намного меньше чем писать всё с 0.
Код:
ScaleBy(120,96);
верхнее сообщение о вирусе это реакция каспера на изменение при создании формы из модуля. Хотя не понял на что ругался, вроде в форме то же самое сделал но прошло без ругани.
Код:
unit geScale;

interface
uses Forms, Controls;

procedure geAutoScale(MForm: TForm);

implementation

type
TFooClass = class(TControl); { необходимо выяснить защищенность }
{ свойства Font }
procedure geAutoScale(MForm: TForm);
const
cScreenWidth: integer = 800;
cScreenHeight: integer = 600;
cPixelsPerInch: integer = 96;
cFontHeight: integer = -11; {В режиме проектирование значение из Font.Height}
var i: integer;
begin
{ВАЖНО!! : Установите в Инспекторе Объектов свойство Scaled TForm в FALSE.
Следующая программа масштабирует форму так, чтобы она выглядела одинаково
внезависимости от размера экрана и пикселей на дюйм. Расположенный ниже
участок кода проверяет, отличается ли размер экрана во время выполнения
от размера во время проектирования. Если да, Scaled устанавливается в True
и компоненты снова масштабируются так, чтобы они выводились в той же
позиции экрана, что и во время проектирования.}
if (Screen.width <> cScreenWidth) or (Screen.PixelsPerInch <>
cPixelsPerInch) then
begin
MForm.scaled := TRUE;
MForm.height := MForm.height * screen.Height div cScreenHeight;
MForm.width := MForm.width * screen.width div cScreenWidth;
MForm.ScaleBy(screen.width, cScreenWidth);
end;

{Этот код проверяет, отличается ли размер шрифта во времы выполнения от
размера во время проектирования. Если во время выполнения pixelsperinch
формы отличается от pixelsperinch во время проектирования, шрифты снова
масштабируются так, чтобы форма не отличалась от той, которая была во
время разработки. Масштабирование производится исходя из коэффициента,
получаемого путем деления значения font.height во время проектирования
на font.height во время выполнения. Font.size в этом случае работать не
будет, так как это может дать результат больший, чем текущие размеры
компонентов, при этом текст может оказаться за границами области компонента.
Например, форма создана при размерах экрана 800x600 с установленными
маленькими шрифтами, имеющими размер font.size = 8. Когда вы запускаете
в системе с 800x600 и большими шрифтами, font.size также будет равен 8,
но текст будет бОльшим чем при работе в системе с маленькими шрифтами.
Данное масштабирование позволяет иметь один и тот же размер шрифтов
при различных установках системы.}

if (Screen.PixelsPerInch <> cPixelsPerInch) then
begin
for i := MForm.ControlCount - 1 downto 0 do
TFooClass(MForm.Controls[i]).Font.Height :=
(MForm.Font.Height div cFontHeight) *
TFooClass(MForm.Controls[i]).Font.Height;
end;
end;

end.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 15.02.2017, 10:43   #10
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

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

Последний раз редактировалось Heneken87; 15.02.2017 в 10:49.
Heneken87 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Масштабирование программы под размер экрана (Delphi) AdrianoBoom Помощь студентам 3 31.03.2015 17:47
Программы для создания загрузочных экранов Windows 7 Alexandr17 Windows 0 23.04.2014 19:41
Закрепление нескольких экранов в Windows 7 GODEXPERT Windows 1 23.12.2013 18:14
работа с клавиатурой и экранов в асм`е r[s]i Помощь студентам 1 12.03.2012 13:16
Масштабирование окна при разных разрешениях artemavd Общие вопросы Delphi 1 16.07.2009 17:15