НОВОЕ: OS/2 GURU - Вопросы и ответы ru · en · de · es · it · pt · cz · pl · fr

OS/2.GURU Library

Reviews / articles about OS/2 eComStation ArcaOS

Operating systems
ArcaOS, eComStation, IBM OS/2 Warp
eComStation myths 

Latest  
 
 
Blonde Guy

Reformat Утилита для форматирования USB флешек, USB винчестеров (для совместимости с OS/2)

 

(promo)

Unsorted

 

 

AD: ArcaOS 5.1 Russian LIP
Russian ARCAOS exists and it's available since the middle of 2017. All versions are supported: 5.1, 5.1.1.

eCo Software is able to maintain OS/2 LIP packages for any other language (German, Dutch, Brazilian Portuguese, Spanish, Sweden, etc)

What is dpi and how to design dialogs


TITLE: What is dpi and how to design dialogs

DATE: 2009-03-20 22:36:05

AUTHOR: Dmitry A.Steklenev
Please use online translator
go to http://translate.google.com
and request the translation of http://ru.ecomstation./projects/reviews/index.php?id=192
to your language

Что такое dpi и ppi

dpi (произносится как дипиай) - сокращение для англ. dots per inch количество точек на линейный дюйм. Применяется для указания разрешающей способности плоского носителя. Измеряется числом точек, приходящихся на линейный дюйм поверхности. Например обозначение 600x300 dpi для принтера означает, что его разрешающая способность равна 600 точек по горизонтали и 300 точек по вертикали на 1 дюйм.

ppi англ. pixels per inch - количество пикселей на линейный дюйм. То, что называется разрешением электронной версии файла, на самом деле является параметром ppi - количество пикселей на линейный дюйм. Пиксель - элементарная ячейка мозаики изображения.

В дальнейшем будет использоваться термин dpi.

Зачем нужно знать разрешающую способность экрана

Знание разрешающей способности экрана позволяет сформировать изображение некоторого объекта так, чтобы он имел на экране определенные физические размеры. Например, чтобы изобразить квадрат со стороной в один дюйм, нужно вывести на экран монитора с разрешающей способностью в 96 dpi квадрат, каждая сторона которого состоит из 96 пикселей. А для того чтобы напечатать этот же квадрат на принтере, имеющем разрешающую способность в 600 dpi, его сторона должна состоять из 600 точек.

Почему 96 dpi и 120 dpi

Большинство VGA мониторов середины 80-х годов имели разрешение в районе от 70 до 74 dpi. Самыми "правильными" мониторами тех времен были мониторы компьютеров Macintosh компании Apple, разрешающая способность которых была равна 72 dpi. На этих мониторах один пиксел соответстовал одному типографскому пункту, который как раз и равен 1/72 дюйма.

Далее было замечено, что расстояние от человеческого глаза до поверхности монитора в среднем на 1/3 превышает аналогичное расстояние до листа бумаги и изображение на мониторе кажется меньше. Т.е. для того чтобы отображаемый на мониторе объект имел тот же визуальный размер, какой он потом будет иметь на бумаге, его нужно делать на 1/3 больше. Для решения этой проблемы был выбран странный способ, операционные системы стали рапортовать для мониторов с с разрешающей способностью в районе 72 dpi значение в 96 dpi.

Позже, IBM разработали монитор 8514, имевший реальную разрешающую способность в 96 dpi, и соответственно, в операционные системы была включена поддержка разрешающей способности в 120 dpi.

На данный момент, огромный парк мониторов с разнообразнейшими физическими размерами и поддерживаемыми разрешениями свел на нет все попытки привязать их к стандартному типографскому пункту. Поэтому, на текущий момент, Windows считает все мониторы имеющими разрешающую способность в 96 dpi и позволяет вручную сменить это значение на 120 dpi, а OS/2, по умолчанию, считает все мониторы с разрешением меньше 1024x768 пикселей - мониторами с разрешающей способностью в 96 dpi, а все остальные - мониторами с разрешающей способностью в 120 dpi.

Зачем может понадобиться изменять разрешающую способность монитора

Очень важно понимание того, что изменение значения dpi для экрана монитора, это не способ увеличения или уменьшения размера элементов изображения, а способ добиться их правильного отображения. Т.е. если шрифт на экране с правильно выставленной разрешающей способностью выглядит мелковато, то нужно менять типографский размер шрифта, а не dpi экрана.

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

Кроме того, зная разрешение экрана в пикселах по вертикали и горизонтали, а также зная длину диагонали монитора в линейных дюймах, dpi экрана можно легко рассчитать по следующей формуле:

Опасности неправильно выставленной разрешающей способности

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

Как узнать разрешающую способность экрана, используемую системой

Для этого в OS/2 нужно выяснить параметры устройства, используемого для отображения рабочего стола. Делается это следующим образом:

HPS   hps  = WinGetPS( HWND_DESKTOP );
HDC   hdc  = GpiQueryDevice( hps );
LONG  hres = 0;
LONG  vres = 0;

DevQueryCaps( hdc, CAPS_HORIZONTAL_FONT_RES, 1L, &hres );
DevQueryCaps( hdc, CAPS_VERTICAL_FONT_RES  , 1L, &vres );

Размеры шрифтов

Размер шрифтов в OS/2 указывается в типографских пунктах. Один типографский пункт равен 1/72 дюйма. Поэтому, при самостоятельном отображении шрифта в программе, необходимо пересчитать его размер с учетом текущей разрешающей способности экрана. Если воспользоваться значениями, полученными в предыдущем примере, то делается это следующим образом:

SIZEF size;

size.cx = ( MAKEFIXED( font_size, 0 ) / 72 ) * hres;
size.cy = ( MAKEFIXED( font_size, 0 ) / 72 ) * vres;

GpiSetCharBox( hps_to_draw, &size );

Размеры значков

Значки в OS/2 имеют размер в 1/3 дюйма. Для мини значков применяется размер в 1/6 дюйма. Поэтому, при использовании разрешающей способности в 96 dpi, иконки должны иметь размер в 32x32 и 16x16 пикселей. При 120 dpi - этот размер увеличится до 40x40 и 20x20 пикселей соответственно. Узнать размеры иконок, используемые системой, можно с помощью функции WinQuerySysValue:

LONG icon_width  = WinQuerySysValue( HWND_DESKTOP, SV_CXICON );
LONG icon_height = WinQuerySysValue( HWND_DESKTOP, SV_CYICON );

О координатах шаблонов диалогов

Координаты в шаблонах диалогов задаются в специальных единицах. Эти единицы базируются на среднем размере символа шрифта, используемого системой по умолчанию. Одна единица по горизонтали равна 1/4 ширины такого символа, а одна единица по вертикали равна 1/8 высоты символа.

Так как средний размер символа будет изменяться при изменении dpi экрана, то использование таких координат гарантирует, что диалог будет отображаться с соблюдением заданных в шаблоне физических размеров при любом dpi экрана.

Средний размер символа для шрифта по умолчанию также можно выяснить у устройства, используемого для отображения рабочего стола:

HPS   hps = WinGetPS( HWND_DESKTOP );
HDC   hdc = GpiQueryDevice( hps );
LONG  char_height = 0;
LONG  char_width  = 0;

DevQueryCaps( hdc, CAPS_GRAPHICS_CHAR_WIDTH,  1L, &char_width  );
DevQueryCaps( hdc, CAPS_GRAPHICS_CHAR_HEIGHT, 1L, &char_height );

OS/2 использует средний размер символа в 13x13 пикселей для разрешающей способности в 96 dpi и 16x16 для 120 dpi. Поэтому, одна единица координат шаблона диалога по горизонтали будет равна 3.25 пиксела для 96 dpi и 4 пиксела для 120 dpi. По вертикали получатся удвоенные значения - 6.5 и 8 пикселей соответственно.

Общие выводы

Как видно из предыдущего текста, все элементы пользовательского интерфейса OS/2 ориентированы на две возможные разрешающие способности - 96 dpi и 120 dpi. Появление в современных видеодрайверах возможности выбора пользователем разрешающей способности экрана можно только поприветствовать. Но некоторые драйвера, вместо изменения значения dpi экрана, предлагают выбрать размер шрифта, размер значков и размер диалогов. Такой вариант выбора является принципиально неверным и приводит к печальным последствиям. Особенно, если неверная комбинация параметров выставлена у разработчика программного обеспечения.

В частности, для драйвера Panorama, только две комбинации параметров являются допустимыми. Крупный размер шрифта, крупный размер значков и средний размер диалогов является правильным для разрешающей способности в 120 dpi. Мелкий размер шрифта, мелкий размер значков и мелкий размер диалогов является правильным для разрешающей способности в 96 dpi. Все остальные комбинации параметров являются неверными и не должны применяться.

Рекомендации для разработчиков

  1. Всегда создавайте пользовательский интерфейс программы с использованием шаблонов диалогов. Такой интерфейс будет отображаться корректно при различных разрешающих способностях экрана.
  2. Если по каким-то причинам, использование шаблонов диалогов является неприемлемым, задавайте координаты создаваемых элементов управления в единицах диалогов и конвертируйте их в обычные пиксельные координаты с помощью функции WinMapDlgPoints.
  3. Всегда используйте в качестве графических элементов диалогов стандартные значки OS/2. Не используйте растровые изображения, так как они не масштабируются при изменении разрешающей способности экрана.
  4. Если использование растрового изображения в диалоге является необходимым, подготовьте два изображения. Одно с размером, соответствующим разрешающей способности в 96 dpi, а другое - для 120 dpi. Подставляйте нужное изображение при инициализации диалога в зависимости от текущей разрешающей способности экрана.
  5. При создании стандартного значка OS/2 создавайте все необходимые его изображения: 40x40, 32x32, 20x20 и 16x16 пикселей. Иначе OS/2 будет пытаться масштабировать изображение самостоятельно, а это у нее не всегда хорошо получается.
  6. Периодически проверяйте, как выглядит программа при разрешающей способности, отличной от той, с которой вы работаете постоянно.

Test the program:

Upgrade eComStation 2.0 desktop to NeoWPS (useful extenders for desktop)

Comments:

Digi
2009-03-24 02:04:01

.......-.. ... ..... .... . .... ...... ........ ...., ... ....... . .. .....

Sergey Posokhov
2009-03-25 19:19:11

........ . ........ .... ...... (...... .......), .. ....... .. ......... ........

Milena
2009-06-02 09:37:01

.......! ... .... . ..... .........

.....
2009-06-02 21:53:33

C......!

.....
2009-09-14 17:55:30

......... .. ......! ..... . ........

.....
2010-08-19 18:27:59

..... ...... !

.. .............., . ..... ............ ..... ...... ...... .. ....... . .... .......

........ 600x300 dpi.

. ..... ..... .......... . 192 pdi?

.. ....... . .. ......, ..... ... ... ...... ..... ....... . .. ...... .........

.....
2013-01-23 10:51:32

....... .......!

Digi
2016-12-15 09:09:18

...-.. .. ... . ....... ". ........... ........ ........": "....... .. ........... ..... 1/4 ...... ...... ......., . .... ....... .. ......... ..... 1/8 ...... .......", . .....: ".. ......... ......... ......... ........". .. 1/8 ... ..... .. ......... 1/4. .....: "OS/2 .......... ....... ...... ....... ... 16x16 ... 120 dpi". . . .... .. DevQueryCaps() .......... 20.20. . ........., .. .... .......... . .... .. .......... ........ ..... .. ........ ......... ......... . ....... ... .......... ... .......... .. ........

eComStation 2.0 is designed to work on modern computers (i3/i5/i7, Core Duo, AMD X2), but works on hardware purchased 5 years ago. eCS 2.0 what's new

 

Siberian OS/2

 


 

 

ArcaOS 5.1.1 - DOS works again

DOS virtual machine works again (it was working on Core 2 Duo, and didn't for i5). Install ArcaOS in UEFI mode to use DOS VM.

Blonde Guy

FOC file selector

eCo Software have created File Open Container - modern dialog to open/select files.

Some remarks about FOC development

// надо на ENG!!
Blonde Guy

Buy OS/2 application: OS/2 Doctor to analyze what is broken in OS/2 (15$)

Warpstock Europe 2016

Interview with Keith ..

video

 

(C) OS2.GURU 2001 -- 2025