строительство домов под ключ от компании СК Медный Всадник в Казани

3.1 Font — шрифт отображения текста в компонентах

Во всех компонентах ввода и отображения текстовой и цифровой информации шрифт текста, его размер, стиль (жирный, курсив и т.п.) определяются свойством Font. Это свойство в свою очередь является объектом типа TFont, который имеет множество подсвойств, устанавливаемых в процессе проектирования или программно во время выполнения приложения. Основные свойства шрифта следующие:


CharsetОпределяет набор символов шрифта.
ColorОпределяет цвет текста.
HeightХарактеризует высоту шрифта в пикселях.
NameВид (имя) шрифта.
PitchОпределяет способ установки ширины символов.
SizeРазмер шрифта в кеглях (пунктах).
StyleСтиль шрифта: полужирный — fsBold, курсив — fsItalic, подчеркнутый — fsUnderline, перечеркнутый — fsStrikeout.

Если система не может найти шрифта с заданной комбинацией свойств Name, Charset, Pitch и Size, Windows использует другой, близкий по характеристикам шрифт.

Основное свойство шрифта — Name. Если заданный именем Name шрифт недоступен в системе, Windows заменит его другим шрифтом. По умолчанию для всех компонентов Delphi, начиная с Delphi 2, задается имя шрифта MS Sans Serif и размер 8. Delphi 1 задает имя шрифта System и размер 10. Можно рекомендовать без особой нужды не изменять Name, так как заданные по умолчанию шрифты есть на любом компьютере с Windows, а другой шрифт может отсутствовать на компьютере пользователя вашей программы.

Свойства Size и Height определяют размер шрифта. Свойство Size определяет его в кеглях (пунктах, принятых в Windows), a свойство Height — в пикселях. Если значение Size задано отрицательным, то в размер входит верхний пиксель каждой строки. Если значение Size задано положительным, то этот пиксель не учитывается.

Значение Size связано со свойствами Height и PixelsPerInch (число пикселей на дюйм) соотношением:

Font.Size = -Font.Height * 72 / Font.PixelsPerInch

Из соотношения, в частности, видно, что задание положительного значения Size ведет к отрицательному значению Height и наоборот.

Свойство Pitch обычно имеет значение fpDefault, при котором ширина устанавливается равной по умолчанию, т.е. описанной в шрифте заданного вида Name. Свойство может принимать также значения fpFixed — установка одинаковой ширины всех символов и fpVariable — установка различной ширины символов. Задание значения отличного от fpDefault заставляет Windows искать наилучший способ удовлетворить всем заданным характеристикам шрифта. Иногда это может привести к замене шрифта на шрифт другого, близкого вида, а иногда может вообще не повлиять на шрифт — все зависит от конкретного вида шрифта и даже от его версии.

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

В Delphi предопределено много констант, соответствующих стандартным наборам символов. Большинство из них, относящихся к японскому, корейскому, китайскому и другим языкам, вряд ли представляют интерес для наших читателей. Поэтому отметим только одно значение — 204, обозначаемое также константой RUSSIAN_CHARSET, которое соответствует символам кириллицы.

По умолчанию в объектах типа TFont задается значение Charset, равное 1 или DEFAULT_CHARSET. При этом шрифт выбирается только по его имени Name и размеру Size. Если описанный шрифт недоступен в системе, то Windows заменит его другим шрифтом. Для имен шрифтов, принятых в Delphi по умолчанию, это обычно нормальный вариант. Но в ряде случаев полезно для отображения русских текстов с другими шрифтами заменить это значение на RUSSIAN_CHARSET. Это позволит отобразить символы кириллицы для тех шрифтов, для которых при DEFAULT_CHARSET символы кириллицы не отображаются нормально.

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

Label1.Font.Style := [ ]; {Обычный стиль}
Label1.Font.Style := [fsBold]; {Полужирный}
Label1.Font.Style := [fsBold, fsItalic]; {Полужирный курсив}

Значения свойств объекта Font можно присваивать по отдельности, как это сделано в приведенных выше операторах для свойства Style. Но чаще они задаются все сразу методом Assign, который записывает значения всех свойств одного объекта в другой. Пусть, например, на форме имеется компонент Memo1 (см. раздел 3.3.4), в котором расположен некоторый текст, компонент FontDialog1 — диалог выбора шрифта (см. раздел 8.4), и меню с разделом выбора шрифта, названным MFont. Для того, чтобы пользователь мог выбрать имя и атрибуты шрифта текста, отображаемого в Memo1, в обработчик события OnClick раздела меню MFont надо вставить оператор:

if (FontDialog1.Execute)
then Memo1.Font.Assign(FontDialog1.Font);

Если пользователь сменил атрибуты в диалоговом окне выбора шрифта, то метод FontDialog1.Execute (см. раздел 8.1) возвращает true и атрибуты шрифта компонента Memo1 устанавливаются равными выбранным пользователем.

Для того, чтобы продемонстрировать доступные в системе шрифты и исследовать влияние на них свойств Pitch и Charset, можно построить тестовое приложение, показанное на рис. 3.1 В нем используются компоненты MainMenu, Button, ComboBox, SpinEdit и Memo, которые будут рассмотрены позднее в разделах 6.1, 5.2, 3.3.5, 3.4.2 и 3.3.4. Поэтому те, кто не знаком с этими компонентами, могут пока пропустить данный пример и вернуться к нему позднее.

Рис. 3.1
Тестовое приложение свойств шрифта

Разместите на форме многострочное окно редактирования Memo (см. раздел 3.3.4), в который поместите какой-нибудь текст, например, тест латинских и русских символов, показанный на рис. 3.1. Перенесите на форму выпадающий список ComboBox (см. раздел 3.3.5), в который будут загружаться имена шрифтов, доступных системе на данном компьютере. Назовите этот компонент CBName. Разместите еще один компонент ComboBox, который будет содержать возможные значения свойства Pitch. Назовите его CBPitch и занесите в его свойство Items строки «fpDefault», «fpFixed» и «fpVariable». Разместите на форме также компонент SpinEdit (см. раздел 3.4.2), в котором можно будет задавать численные значения свойства Charset, и кнопку Button (см. раздел 5.2), нажатие которой будет передавать значение, введенное пользователем в SpinEdit, в свойство шрифта Charset. Разместите на форме компонент главного меню MainMenu (см. раздел 6.1) и введите в меню один раздел — Шрифт, при выборе которого пользователь сможет в диалоге выбирать атрибуты шрифта, в частности, его размеры и стиль. Чтобы обеспечить диалог выбора шрифта разместите на форме также компонент FontDialog (см. раздел 8.4).

Расположение всех компонентов может примерно соответствовать приведенному на рис. 3.1. Далее надо написать обработчики событий: события OnCreate при созданий формы (FormCreate), выбора раздела меню (MFontClick), изменений в списке CBName (CBNameClick) и в списке CBPitch (CBPitchChange) и щелчка на кнопке Button1 (Button1Click). Ниже приведен текст всех этих обработчиков.

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
// Загрузка в CBName всех шрифтов системы
for i := 0 to Screen.Fonts.Count — 1 do
CBName.Items.Add(Screen.Fonts[i]);
CBName.ItemIndex := 0;
CBPitch.ItemIndex := 0;
// Загрузка в Memo1 имени первого шрифта
Memo1.Font.Name := CBName.Items[CBName.ItemIndex];
end;
procedure TForm1.MFontClick(Sender: TObject);
begin
// Задание диалогу текущих атрибутов шрифта Memo1
FontDialog1.Font.Assign(Memo1.Font);
if (FontDialog1.Execute)
then begin
// Задание атрибутов шрифта, выбранных в диалоге пользователем 
Memo1.Font.Assign(FontDialog1.Font);
CBName.Text:=Memo1.Font.Name;
SpinEdit1.Value:=FontDialog1.Font.CharSet;
end
end;
procedure TForm1.CBNameChange(Sender: TObject);
begin
// Изменение свойства Name
Memo1.Font.Name := CBName.Items[CBName.ItemIndex];
end;
procedure TForm1.CBPitchChange(Sender: TObject);
begin
// Изменение свойства Pitch
case CBPitch.ItemIndex of
0: Memo1.Font.Pitch := fpDefault;
1: Memo1.Font.Pitch := fpFixed;
2: Memo1.Font.Pitch := fpVariable;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Изменение свойства CharSet
Memo1.Font.CharSet := SpinEdit1.Value;
end;

Комментарии в тексте поясняют отдельные операции. Запустите приложение и исследуйте шрифты, зарегистрированные в системе, и влияние на них свойств Pitch и Charset.


к началу страницы