Компонент FontDialog вызывает диалоговое окно выбора атрибутов шрифта. В нем пользователь может выбрать имя шрифта, его стиль (начертание), размер и другие атрибуты.
Основное свойство компонента - Font типа TFont, в котором можете задать при желании начальные установки атрибутов шрифта и в котором вы можете прочесть значения атрибутов, выбранные пользователем в процессе диалога.
Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта. Если значения этих свойств равны 0 (по умолчанию), то никакие ограничения на размер не накладываются. Если же значения свойств заданы (обычно это целесообразно делать исходя из размеров компонента приложения, для которого выбирается шрифт), то в списке Размер диалогового окна появляются только размеры, укладывающиеся в заданный диапазон. При попытке пользователя задать недопустимый размер ему будет выдано предупреждение вида «Размер должен лежать в интервале ...» и выбор пользователя отменится. Правда, это срабатывает не на всех версиях Windows. Свойства MaxFontSize и MinFontSize действуют только при включенной опции fdLimitSize.
Свойство Device определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreen - из списка экрана (по умолчанию), fdPrinter - из списка принтера, fdBoth - из обоих.
Свойство Options содержит множество опций:
fdAnsiOnly | Отображать только множество шрифтов символов Windows, не отображать шрифтов со специальными символами. |
fdApplyButton | Отображать в диалоге кнопку Применить независимо от того, предусмотрен ли обработчик события OnApply. |
fdEffects | Отображать в диалоге индикаторы специальных эффектов (подчеркивание и др.) и список Цвет. |
fdFixedPitchOnly | Отображать только шрифты с постоянной шириной символов. |
fdForceFontExist | Позволять пользователю выбирать шрифты только из списка, запрещать ему вводить другие имена. |
fdLimitSize | Разрешить использовать свойства MaxFontSize и MinFontSize, ограничивающие размеры шрифта. |
fdNoFaceSel | Открывать диалоговое окно без предварительно установленного имени шрифта. |
fdNoOEMFonts | Удалять из списка шрифтов шрифты OEM. |
fdScalableOnly | Отображать только масштабируемые шрифты, удалять из списка не масштабируемые (шрифты bitmap). |
fdNoSimillations | Отображать только шрифты и их начертания, напрямую поддерживаемые файлами, не отображая шрифты, в которых жирный стиль и курсив синтезируется. |
fdNoSizeSel | Открывать диалоговое окно без предварительно установленного размера шрифта. |
fdNoStyleSel | Открывать диалоговое окно без предварительно установленного начертания шрифта. |
fdNoVectorFonts | Удалять из списка векторные шрифты (типа Roman или Script для Windows 1.0). |
fdShowHelp | Отображать в диалоговом окне кнопку Справка. |
fdTrueTypeOnly | Предлагать в списке только шрифты TrueType. |
fdWysiwyg | Предлагать в списке только шрифты, доступные и для экрана, и для принтера, удаляя из него аппаратно зависимые шрифты. |
По умолчанию все эти опции, кроме fdEffects, отключены.
Если установить опцию fdApplyButton, то при нажатии пользователем кнопки Применить возникает событие OnApply, в обработчике которого вы можете написать код, который применит выбранные пользователем атрибуты, не закрывая диалогового окна.
Приведем примеры применения компонента FontDialog. Пусть ваше приложение включает окно редактирования Memo1, шрифт в котором пользователь может выбирать командой меню Шрифт. Вы ввели в приложение компонент FontDialog, имя которого по умолчанию FontDialog1. Тогда обработчик команды Шрифт может иметь вид:
if(FontDialog1->Execute())
Memo1->Font->Assign(FontDialog1->Font);
Приведенный оператор вызывает диалог выбора атрибутов шрифта и, если пользователь произвел выбор, то значения всех выбранных атрибутов, содержащиеся в свойстве FontDialog1->Font, присваиваются атрибутам окна редактирования, содержащимся в свойстве Memo1->Font. Шрифт в окне редактирования немедленно изменится.
Если установите в компоненте FontDialog1 опцию fdApplyButton, то можете написать обработчик события OnApply:
Memo1->Font->Assign(FontDialog1->Font);
Тогда пользователь может наблюдать изменения в окне Memo1, нажимая в диалоговом окне кнопку Применить и не прерывая диалога. Это очень удобно, так как позволяет пользователю правильно подобрать атрибуты шрифта.
Если в качестве окна редактирования в приложении используется RichEdit, то можно предоставить пользователю выбирать атрибуты шрифта для выделенного фрагмента текста или для вновь вводимого текста. Тогда выполнение команды меню Шрифт может осуществляться операторами:
if(FontDialog1->Execute())
RichEdit1->SelAttributes->Assign(FontDialog1->Font);
Можно разрешить пользователю изменять шрифт не только отдельных компонентов, но и всех компонентов и надписей на форме. Это осуществляется оператором:
if(FontDialog1->Execute())
Font->Assign(FontDialog1->Font);
В этом операторе свойство Font без ссылки на компонент подразумевает шрифт формы.