Книга: C# для профессионалов. Том II

Шрифты и семейства шрифтов

Все интуитивно считают, что достаточно хорошо понимают шрифты. В конце концов мы видим их почти постоянно. Шрифт точно описывает, как должна выводиться каждая буква. Выбор подходящего шрифта, а также предоставление разумного множества шрифтов в документе является важным фактором улучшения читабельности документа. Можно просто взглянуть на страницы этой книги, чтобы увидеть, сколько использовалось шрифтов. Нужно тщательно выбирать шрифты, поскольку плохой выбор шрифта может существенно повредить как привлекательности, так и использованию приложения. Многие при вопросе о названии шрифта скажут что-нибудь типа 'Arial' или 'Times New Roman' или 'Courier'. Фактически это не шрифты вообще, это семейства шрифтов. Шрифты будут чем-нибудь типа Arial 9-point italic. Семейство шрифтов сообщает в общих терминах визуальный стиль текста и является ключевым фактором в общем представлении приложения. Большинство людей способны распознавать стили наиболее распространенных семейств шрифтов, даже если и не осознают этого. Шрифт добавляет дополнительную информацию, определяя размер текста, а также применение к тексту определенных модификаций. Например, будет ли это жирный, курсив или подчеркнутый текст, выведется ли он ЗАГЛАВНЫМИ БУКВАМИ или как подстрочный индекс. Такие модификации технически называются стилями, хотя в некотором смысле термин вводит в заблуждение, поскольку только что было отмечено, что визуальное представление определяется в основном семейством шрифта.

Размер текста определяется его высотой. Высота измеряется в пунктах (points) — традиционная единица измерения, которая представляет 1/72 дюйма (для людей, живущих за пределами Великобритании и США, пункт равен 0.351 мм). Поэтому, например, буквы в 10-пунктовом шрифте имеют в высоту 10/72 дюйма (или приблизительно 1/7", или 3.5 мм). Из этого объяснения может показаться, что семь строк текста с размером шрифта 10 разместятся по вертикали на одном дюйме экрана или пространства бумаги. Фактически их будет немного меньше, так как необходимо также обеспечить интервалы между строками.

Строго говоря, измерение высоты не так просто, как может показаться, поскольку есть несколько различных высот, которые необходимо учитывать. Например, существует высота высокой буквы, такой как А или f (этот размер мы действительно имеем в виду, когда говорим о высоте), дополнительная высота, занимаемая любым акцентом над буквой типа ? или ? (внутренняя высота строки), и дополнительная высота ниже базовой линии, необходимая для нижних частей букв типа у или g (спуск). Однако для данной главы это несущественно. Если определено семейство шрифтов и основная высота, такие дополнительные высоты задаются автоматически — нельзя независимо выбрать их значения.

Иногда при работе со шрифтами могут встретиться и другие термины, используемые для описания некоторых семейств шрифтов.

? Семейство шрифтов serif имеет небольшие черточки на концах многих линий, которые составляют символы. Эти черточки называют засечками (serifs). Times New Roman является классическим примером такого шрифта.

? Семейства шрифтов sans serif, в противоположность, не имеют этих черточек. Хорошими примерами шрифтов sans serif являются Arial и Verdana. Отсутствие черточек часто придает тексту резкий, бросающийся в глаза вид, поэтому шрифты sans serif часто используются для выделения важного текста.

? В семействе шрифтов true type очертания кривых, формирующих символы, вычисляются точными математическими способами. Это означает, что одно и то же определение может использоваться для вычисления того, как нарисовать шрифты семейства любого размера. Сегодня практически все используемые шрифты являются шрифтами true type. Некоторые старые семейства шрифтов из Windows 3.1 определялись с помощью отдельного битового изображения для каждого символа любого размера, но сегодня эти шрифты не используются. (Среди других недостатков они вызывают проблемы при переходе от экрана к современному принтеру, где число пикселей на дюйм значительно больше, поэтому битовые изображения будут выглядеть слишком маленькими).

Microsoft предоставляет два основных класса, с которыми необходимо иметь дело при выборе или манипуляциях со шрифтами. Это классы System.Drawing.Font и System.DrawingFontFamily. Мы уже видели основное использование класса Font. Когда необходимо нарисовать текст, создается экземпляр класса Font и передается методу DrawString для указания того, как должен быть нарисован текст. Экземпляр FontFamily используется для представления семейств шрифтов.

Одно из применений класса FontFamily возникает в ситуации, когда требуется шрифт определенного типа (Serif, SansSerif или Monospace), но неважно какой. Статические свойства GenericSerif, GenericSansSerif и GenericMonospace выявляют используемые по умолчанию шрифты, соответствующие этим критериям:

FontFamily sansSerifFont = FontFamily.GenericSansSerif;

Однако при написании профессионального приложения желательно выбирать шрифт более тщательно. Скорее всего, код рисования реализуется таким образом, что будет проверять, какие семейства шрифтов реально установлены на компьютере и, следовательно, какие шрифты доступны. Затем приложение выберет подходящий шрифт, возможно, взяв первый доступный шрифт из списка предпочтительных шрифтов. Если желательно, чтобы приложение имело более дружественный пользовательский интерфейс, то первым вариантом в списке предпочтительных будет шрифт, который пользователь выбирал в последний раз при выполнении этого приложения. Обычно используются наиболее популярные семейства шрифтов, такие как Arial и Times New Roman. Но если попробовать вывести текст с помощью шрифта, который не существует, результаты не всегда будут предсказуемы, и, скорее всего, Windows просто подставит стандартный системный шрифт, который очень легко нарисовать системе, но который выглядит не совсем удачно и, появившись в документе, создаст впечатление программного обеспечения плохого качества.

Шрифты, доступные в системе, можно определить с помощью класса, называемого InstalledFontCollection, который находится в пространстве имен System.Drawing.Text. Этот класс представляет реализации свойства Families, которое является массивом всех шрифтов, доступных для использования в системе:

InstalledFontCollection insFonc = new InstalledFontCollection();
FontFamily [] families = insFont.Families;
foreach (FontFamily family in families) {
 // выполнить обработку с помощью этого семейства шрифтов
}

Оглавление книги

Оглавление статьи/книги

Генерация: 2.150. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз