netlib.narod.ru< Назад | Оглавление | Далее >

Новые шрифты из FontFamily

Четыре следующих конструктора аналогичны предыдущим за исключением того, что первым аргументом выступает объект FontFamily, а не текстовая строка с названием гарнитуры:


Конструкторы Font (выборочно)



Font(FontFamily ff, float fSizeInPoints)
Font(FontFamily ff, float fSizeInPoints, FontStyle fs)
Font(FontFamily ff, float fSize, GraphicsUnit gu)
Font(FontFamily ff, float fSize, FontStyle fs, GraphicsUnit gu)


Возникает вопрос: как получить объект FontFamily?

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

  Font font18 = new Font(font.Name, 18, font.Style);

А можно в качестве первого аргумента использовать свойство FontFamily:

  Font font18 = new Font(font.FontFamily, 18, font.Style);

Кроме того, объект FontFamily можно получить используя один из трех его конструкторов:


Конструкторы FontFamily



FontFamily(string strFamily)
FontFamily(GenericFontFamilies gff)
FontFamily(string strFamily, FontCollection fontcoll)


Первый конструктор предполагает, что объект FontFamily целиком определяется названием гарнитуры. Действительно, инструкция

  Font font = new Font(strFamily, fSizeInPoints);

это просто короткая форма записи инструкции

  Font font = new Font(new FontFamily(strFamily), fSizeInPoints);

Единственное нестатическое свойство FontFamily — это его название:


Нестатические свойства FontFamily



Тип Свойство Доступ Описание

string Name Чтение Название гарнитуры


Хотя можно создать Font не создавая FontFamily в явном виде, иногда переменная типа FontFamily оказывается полезной:

  FontFamily ff = new FontFamily{strFamily);

Чтобы определить, доступен ли какой-либо стиль шрифта, можно использовать метод IsStyleAvailable:


Методы FontFamily (выборочно)



bool IsStyleAvailable(FontStyle fs)


Не все шрифты TrueType или OpenType имеют полужирное или курсивное начертания, и, если попытаться создать курсивное или полужирное начертание для таких шрифтов, будет сгенерировано исключение. Хуже того, не все шрифты имеют нормальное начертание! Поэтому имеет смысл писать код вот так:

  if (ff.IsStyleAvailable(FontStyle.Italic))
      fontItalic = new Font(ff, 24, FontStyle.Italic);
  else if (ff.IsStyleAvailable(FontStyle.Regular)
      fontItalic = new Font(ff, 24, FontStyle.Regular);
  else
      fontItalic = new Font(ff, 24, FontStyle.Bold);

Этот код может не привести к созданию курсивного шрифта, но он хоть не сгенерирует исключение.

Как я уже говорил, для многих гарнитур разные начертания шрифтов содержатся в разных файлах. Иногда Windows синтезирует курсивное и полужирное начертания, т.е. создает курсивные, полужирные и курсивные полужирные версии, видоизменяя знаки нормального шрифта. Это происходит в случае шрифтов Symbol, Wingdings и Webdings.

Второй конструктор FontFamily требует участия элементов перечисления GenericFontFamilies, определенного в System.Drawing.Text:


GenericFontFamilies



Член Значение Описание

Serif 0 Например, Times New Roman
SansSerif 1 Например, Arial
Monospace 2 Например, Courier New


Я уже предупреждал о возможных проблемах при создании шрифта на основе названия гарнитуры, если этой гарнитуры нет в системе:

  font = new Font("Times New Roman", 24);

Вы будете спокойнее себя чувствовать, применяя конструкцию:

  font = new Font(new FontFamily(GenericFontFamilies.Serif), 24);

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


Статические свойства FontFamily (выборочно)



Тип Свойство Доступ Описание

FontFamily GenericSerif Чтение Например, Times New Roman
FontFamily GenericSansSerif Чтение Например, Arial
FontFamily GenericMonospace Чтение Например, Courier New


Можно создать шрифт, например, так:

  font = new Font(FontFamily.GenericSerif, 24);

Третий конструктор FontFamily мы рассмотрим далее в этой главе.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz