Четверг, 02.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Графика » Разные

Монитор, разрешения экрана

Масштабирование окон в зависимости от разрешения монитора

  • В ранней стадии создания приложения решите для себя хотите ли вы позволить форме масштабироваться. Преимущество немасштабируемой формы в том, что ничего не меняется во время выполнения. В этом же заключается и недостаток (ваша форма может бать слишком маленькой или слишком большой в некоторых случаях).
  • Если вы не собираетесь делать форму масштабируемой, установите свойство Scaled=False и дальше не читайте. В противном случае Scaled=True.
  • Установите AutoScroll=False. AutoScroll = True означает не менять размер окна формы при выполнении что не очень хорошо выглядит, когда содержимое формы меняет размер.
  • Установите шрифты формы на TrueType, например Arial. Если такого шрифта не окажется на пользовательском компьютере, то Windows выберет альтернативный шрифт из того же семейства. Этот шрифт может не совпадать по размеру, что вызовет проблемы.
  • Установите свойство Position в любое значение, отличное от poDesigned. poDesigned оставляет форму там, где она была во время дизайна, и, например, при разрешении 1280x1024 форма окажется в левом верхнем углу и совершенно за экраном при 800x600.
  • Оставляйте по-крайней мере 4 точки между компонентами, чтобы при смене положения границы на одну позицию компоненты не "наезжали" друг на друга. Для однострочных меток (TLabel) с выравниванием alLeft или alRight установите AutoSize=True. Иначе AutoSize=False.
  • Убедитесь, что достаточно пустого места у TLabel для изменения ширины шрифта - 25% пустого места многовато, зато безопасно. При AutoSize=False убедитесь, что ширина метки правильная, при AutoSize=True убедитесь, что есть ссвободное место для роста метки.
  • Для многострочных меток (word-wrapped labels), оставьте хотя бы одну пустую строку снизу.
  • Будьте осторожны при открытии проекта в среде Delphi при разных разрешениях. Свойство PixelsPerInch меняется при открытии формы. Лучше тестировать приложения при разных разрешениях, запуская готовый скомпилированный проект, а редактировать его при одном разрешении. Иначе это вызовет проблемы с размерами.
  • Не изменяйте свойство PixelsPerInch!
  • В общем, нет необходимости тестировать приложение для каждого разрешения в отдельности, но стоит проверить его на 800x600 с маленькими и большими шрифтами и на более высоком разрешении перед продажей.
  • Уделите пристальное внимание принципиально однострочным компонентам типа TDBLookupCombo. Многострочные компоненты всегда показывают только целые строки, а TEdit покажет урезанную снизу строку. Каждый компонент лучше сделать на несколько точек больше.

Масштабирование размера шрифтов

Когда программы написанные в Delphi работают на системах с установленными маленькими шрифтами, получается странный вид формы. К примеру, расположенные на форме компоненты Label становятся малы для размещения указанного теста, обрезая его в правой или нижней части. StringGrid не осуществляет положенного выравнивания и т.д. Следующий код масштабирует как размер формы, так и размер шрифтов. Вызывая его в FormCreate можно добиться не плохих результатов.

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

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

ВАЖНО! : Установите в Инспекторе Объектов свойство Scaled TForm в FALSE.

interface
uses
 Forms, Controls;
 procedure geAutoScale(MForm: TForm);
implementation
type
 TFooClass = class(TControl); //необходимо выяснить защищенность
procedure geAutoScale(MForm: TForm);
const
 cScreenWidth: integer = 800;
 сScreenHeight: integer = 600;
 cPixelsPerInch: integer = 96;
 cFontHeight: integer = -11; //В режиме проектирование значение из Font.Height
var
 i: integer;
begin
 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;
 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.

Получить ссылку на материал

Категория: Разные | Добавил: Барон (20.12.2011)
Просмотров: 4778 | Теги: Монитор | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
DirectX [17]
OpenGL [2]
Игры [15]
Разные [28]
Королевство Delphi © 2010-2024
Яндекс цитирования