Советы по Delphi

         

Масштабирование окна III


Я полагаю, что описание в документации функции "PixelsPerInch" неверно, поскольку, исходя из моего опыта, она имеет отношение к размеру в пикселях/дюймах системных ШРИФТОВ, а не формы.

Например, Delphi свойство PixelsPerInch по умолчанию обычно содержит значение 96 для всех создаваемых вами форм, НЕЗАВИСИМО ОТ ЭКРАННОГО РАЗРЕШЕНИЯ ВАШЕЙ СИСТЕМЫ. В моей системе именно так, независимо от того, при каком разрешении я работаю: 640x480, 800x600, 1024x768 или др.

Тем не менее, при изменении вашего разрешения экрана, если вы устанавливаете "Large Fonts" (большие шрифты) вместо "Small Fonts" (маленькие шрифты), Delphi PixelPerInch по умолчанию для любых создаваемых вами форм теперь будет равен 120, и снова будет независеть от разрешения вашей системы.

Я подразумеваю, что Delphi делает так по следующей причине: Delphi необходимо знать оба значения PixelsPerInch для формы: в момент ее разработки, и во время работы приложения. С помощью этой информации Delphi может правильно масштабировать форму и изменять размер шрифта с тем, чтобы текст помещался на форму.

Пример:

  • Вы создали форму, используя "Small Fonts". Вы найдете значение по-умолчанию PixelsPerInch, равное 96.

  • Ваш пользователь пытается запустить приложение в системе, где установлены "Large Fonts". Эта установка означает, что весь текст формы должен быть большим относительно остальной части формы из-за большого размера шрифта. Свойство PixelsPerInch для данного пользователя должно быть 120. Если свойство вашей формы "Scaled" установлено в False, Delphi не предпримет никаких мер для компенсации изменения разрешения экрана. Ваш текст при этом, вероятно, будет большим, чем в то время, когда вы разрабатывали форму, и не вместится целиком в отведенное для него место.
  • Тем не менее, если свойство вашей формы "Scaled" установлено в True, Delphi автоматически смаштабирует форму с коэффициентом 120/96. При данном способе форма "вырастает" в соответствии с увеличенным размером шрифтов. После чего форма выглядит точто так, как вы ее разработали.

    ПРИМЕЧАНИЕ: Масштабирование происходит только в случае, если пользовательское свойство PixelsPerInch отличается от его значения во время разработки. Насколько я знаю, это может случиться при смене размера шрифтов во время смены разрешения экрана.

    В моем случае формы НИКОГДА не масштабировались сами, независимо от текущего разрешения экрана: 800x600, 1024x768 и пр., поскольку я всегда использовал "Small Fonts". Это в действительности уводило меня от этой проблемы. Моим решением было масштабирование формы вручную, используя ScaleBy(...).

    Я полагаю что другим решением могло бы быть изменение свойства формы PixelsPerInch во время выполнения программы, когда форма только "готовится создаться". Эта хитрость позволила бы Delphi думать, что форма была разработана с использованием другого значения PixelsPerInch, поэтому ее необходимо соответственно смасштабировать. Например, изменение свойства формы PixelsPerInch с 96 на 80 во время ее создания заставить Delphi ее смасштабировать с коэффициентом 96/80. [001755]



    Содержание раздела