nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 14:46



Reply to topic  [ 9 posts ] 
Фонты в винде 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
И как этот размер может увеличивать нежирный фонт в два раза больше жирного?...

Я готов объяснить эту проблему только в более спокойном ключе.

Дело в том, что настройка
Размер шрифта крупный: 125% обычного размера (120 dpi).
влияет на метрики Винды весьма глобально.

Об этом все забывают, и я чуть позже приведу пример, как серьёзно это влияет.

Значит спокойно объясняю суть проблемы: обычно никто размер шрифтов, выставленный
Виндой по умолчанию - не меняет.
При современных крупных (в пикселях) экранах все экранные надписи становятся довольно
мелкими и за день глаза устают. Поэтому я у себя ставлю настройку:

Image

Вобще-то Венда при выборе этой настройки честно предупреждает, что некоторые программы
могут отображаться некорректно
, и я лично об этом знаю - это следует учитывать при
программировании - но не все об этом знают в принципе.

Вот пример неплохой программы, автор которой об этой проблеме, похоже, совсем не знал.

Вот её внешний вид, когда шрифты выставлены обычные:

Image

Теперь выставим:
Размер шрифта крупный: 125% обычного размера (120 dpi).
И программа поплыла... :(

Image

Проблема вот в чем - Винда не может никаким способом определить - большой у меня
экран дисплея или маленький - но не в точках, а в реальном размере.

Поэтому авторы Винды сориентировались на весьма непоказательный фактор - если юзер
выставил крупные шрифты, значит у него физически большой экран.

А поскольку они тужились реализовать принцип Виз-Виг, то для якобы "реальной"
пропорциональности виндовая геометрия изменяется.

Там в МСДН где-то есть формулы, как они это пересчитывают, но вывод общий такой:
то, что было рассчитано в свои размеры в пикселях - на экране поплывёт...

Способы решения этой проблемы имеются - но мы же не о них здесь?

А вот автор приведенной выше программы писал её на VB, и в настройках своего
"графического конструктора" - выставил единицы - пиксели.
Вот всё и плывёт.

Кстати, этой болезнью не болеют модальные окна Венды - они почему-то делают нужную
коррекцию сами...

Но вот картинки - вставленные без "растяжки" (StretchBlt) - тоже теряют геометрию...

Image

Вот типичный пример выше...

_________________
iLavr


11 May 2013 15:27
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
т.е. таки разные фонты по разному меняются в размерах?

_________________
:dj: https://mastodon.social/@Shaos


11 May 2013 16:21
Profile WWW
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Программисты ленивые. Причем, даже из Microsoft и Corel.

Кстати функция WINAPI CreateWindow, которая создает окна, кнопки и т.п., принимает размер в пикселях и никак его не изменяет. То есть программист сказал 100x100 пикселей, сколько и будет.


11 May 2013 16:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
vinxru wrote:
функция WINAPI CreateWindow, которая создает окна, кнопки и т.п., принимает размер в пикселях и никак его не изменяет. То есть программист сказал 100x100 пикселей, сколько и будет.

Я тоже так опрометчиво раньше думал, что если я всё расчитаю в пикселях - оно
таким везде и будет.
Выяснилось, что несколько заблуждался...

Обо всех этих проблемах метрик Виды неплохо рассказал Стивен Роман в книге
"Программирование в Win32 API на Visual Basic." - это если охота прочитать
по-русски...

А так - на-английском - это в MSDN действително тоже есть.

_________________
iLavr


11 May 2013 17:51
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
В MacOS X в этом отношении намного лучше - попиксельное представление букв не меняется вот уже больше десятилетия :)

Программы написанные на ранних версиях Xcode выглядят абсолютно также на новых маках с новыми макоясми...

_________________
:dj: https://mastodon.social/@Shaos


11 May 2013 18:04
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
В MacOS X в этом отношении намного лучше - попиксельное представление букв не меняется вот уже больше десятилетия :)

Ты немного не поймешь, что меняется - меняется масштаб... :wink:

Image

А в количестве пикселей WINAPI CreateWindow - действительно ничего изменить не может.



Но раз уж у тебя MacOS X под руками - посмотри лучше, что вот здесь изобразил автор
эмуляции Busch-Microtronic 2090?
А то мне MacOS X взять негде... :(

_________________
iLavr


11 May 2013 18:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Чтобы мы не затеивали тут длинных споров - вот мои выписки из документации Венды по этому вопросу:
Quote:
pixel
An abbreviation for picture element, a dot that represents the smallest graphic unit of measurement on a screen. A pixel Is a screen-dependent unit: the dimensions of screen elements vary with the display system and resolution used. By contrast, the twip Is a screen-independent unit of measure.

Remarks
Windows API routines generally require measurements in pixels. You can use these properties to convert measurements quickly without changing an object's ScaleMode setting.

TwipsPerPixelX, TwipsPerPixelY Properties

Specify the number of twips per pixel for the object measured horizontally (TwipsPerPixelX) or vertically (TwipsPerPixelY). Not available at design time; read-only at run time.

twip
A unit of screen measurement equal to 1/20 of a printers point. There are approximately 1440 twips to a logical Inch or 567 twips to a logical centimeter - the length of a screen Item measuring one Inch or one centimeter when printed. A twip Is a screen-independent unit used to ensure that placement and proportion of screen elements In your screen application are the same on all display systems. Contrast with pixel, a screen-dependent unit of measurement.

Remarks
Using the related ScaleHeight, ScaleWidth, ScaleLeft, and ScaleTop properties, you can create a custom coordinate system with both positive and negative coordinates. These four scale properties interact with the ScaleMode property in the following ways:

Setting the value of any other scale property to any value automatically sets ScaleMode to 0.
Setting ScaleMode to a number greater than 0 changes ScaleHeight and ScaleWidth to the new unit of measurement and sets ScaleLeft and ScaleTop to 0. The CurrentX and CurrentY property settings will change to reflect the new coordinates of the current point.

_________________
iLavr


11 May 2013 18:34
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Если грамотно писать программы, то надо ориентироваться на размер системного шрифта, рассчитывая собственный масштаб так, что бы все строки влезали.

Чем то похоже на HTML разметку.


11 May 2013 18:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
vinxru wrote:
Если грамотно писать программы, то надо ориентироваться на размер системного шрифта,
рассчитывая собственный масштаб так, что бы все строки влезали.

Именно! Так и надо это делать!... :kruto:
И для это есть ряд функций WIN API.

Но когда пишешь вроде как сугубо для себя - этим обычно не заморачиваешься...
А вот когда потом высунешь людям попользоваться, если что-то путное получилось,
тут казус обычно и всплывает... :wink:

_________________
iLavr


12 May 2013 05:21
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 9 posts ] 

Who is online

Users browsing this forum: No registered users and 14 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.