Чтение онлайн

на главную - закладки

Жанры

Шрифт:

• масштабирования – определяет преобразование логических координат при графическом выводе в окна, на экран или принтер;

• заполнение контуров – определяет, каким образом будут применяться шаблоны кисти при заполнении контуров;

• сжатия – определяет, каким образом происходит преобразование цветов растровых изображений при их увеличении (уменьшении).

6.5. Работа со шрифтами

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

• растровые;

• векторные;

• TrueType;

• ОрепТуре.

Отличие между данными видами шрифтов заключается в способе хранения параметров

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

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

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

6.6. Рисование примитивов

Теперь вы знаете хотя бы минимум теории, поэтому пора начинать практиковаться. Создадим простое приложение, которое будет рисовать на форме ряд примитивов. Для этого в новом приложении для формы сделаем обработку события OnPaint (листинг 6.1).

...

Листинг 6.1.

Обработчик события формы OnPaint

procedure TfmShapes.FormPaint(Sender: TObject);

var

hCurDC: HDC;

hCurPen, hOldPen: HPEN;

hCurBrush, hOldBrush: HBRUSH;

begin

//получаем общий контекст устройства

hCurDC := GetDC(Handle);

//создаем графический объект Карандаш

hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));

//выбираем его для общего контекста устройства экрана

//и запоминаем ранее выбранный

hOldPen := SelectObject(hCurDC, hCurPen);

//создаем графический объект Кисть

hCurBrush := CreateSolidBrush(RGB(0, 128, 255));

//выбираем ее для общего контекста устройства экрана

//и запоминаем ранее выбранную

hOldBrush := SelectObject(hCurDC, hCurBrush);

//рисуем эллипс

Ellipse(hCurDC, 10, 10, 100, 70);

//рисуем прямоугольник

Rectangle(hCurDC, 110, 10, 210, 70);

//прямоугольник с округленными углами

RoundRect(hCurDC, 10, 80, 100, 140, 10, 10);

//прямоугольник в виде «бочки»

RoundRect(hCurDC, 110, 80, 210, 140, 10, 100);

//рисуем прямую

MoveToEx(hCurDC, 10, 150, nil);

LineTo(hCurDC, 100, 220);

//рисуем дугу

Arc(hCurDC, 110, 150, 210, 220, 110, 150, 210, 220);

//восстанавливаем ранее выбранную кисть

SelectObject(hCurDC, hOldBrush);

//удаляем созданную кисть

DeleteObject(hCurBrush);

//восстанавливаем ранее выбранный карандаш

SelectObject(hCurDC, hOldPen);

//удаляем созданный карандаш

DeleteObject(hCurPen);

//освобождаем

общий контекст устройства

ReleaseDC(Handle, hCurDC);

end;

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

...

hCurDC := GetDC(Handle);

Она получает описатель контекста устройства экрана для клиентской области указанного окна или всего экрана. Функция имеет следующий формат заголовка:

...

Function GetDC(hWnd: HWND): HDC;

Здесь hWnd – дескриптор окна, для которого получается контекст устройства. Если это значение равно nil, то GetDC возвращает контекст устройства для всего экрана. В случае успешного выполнения функция возвращает контекст устройства. В противном случае ее результат равен nil.

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

...

hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));

Формат данной функции следующий:

...

Function CreatePen(fnPenStyle: Integer; nWidth: Integer; crColor: COLORREF): HPEN;

Параметр f nPenStyle задает стиль карандаша. Возможные значения этого параметра приведены в табл. 6.1.

Таблица 6.1

. Стили карандаша

Параметр nWidth задает ширину карандаша в логических единицах. EonnnWidth равен 0, то карандаш будет шириной в один пиксел независимо от текущей трансформации.

CreatePen возвращает карандаш с заданной шириной со стилем PSSOLID, если вы указали ширину больше, чем 1, для одного из стилей: PS_DASH, PS_DOT, PSJDASHDOT, PS_DASHDOTDOT.

Параметр crColor задает цвет карандаша.

Если функция завершилась удачно, то она возвращает дескриптор логического карандаша. В противном случае она возвращает nil.

После того как карандаш создан, следует его выбрать для полученного контекста при помощи функции SelectObject:

...

hOldPen:= SelectObject(hCurDC, hCurPen);

Данная функция имеет следующий формат:

...

Function SelectObject(hdc: HDC; hgdiobj: HGDIOBJ): HGDIOBJ;

• hdc – дескриптор контекста устройства;

• hgdiobj – дескриптор на выбираемый объект.

Если выбранный объект не регион и функция выполнилась успешно, то она возвращает дескриптор на объект, который был заменен. Если выбранный объект регион и функция выполнилась успешно, то возвращаемое значение может быть одним из приведенных в табл. 6.2.

Таблица 6.2.

Результат SelectObject для выбранного объекта регион

Если происходит ошибка и выбранный объект не регион, то возвращаемое значение – nil. Иначе – HGDI_ERROR.

Поделиться:
Популярные книги

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.00
рейтинг книги
Шайтан Иван 5

Телохранитель Генсека. Том 2

Алмазный Петр
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Телохранитель Генсека. Том 2

Старый, но крепкий 8

Крынов Макс
8. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Старый, но крепкий 8

Двойник Короля 6

Скабер Артемий
6. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 6

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VII

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII

Иной. Том 5. Адская работа

Amazerak
5. Иной в голове
Фантастика:
боевая фантастика
городское фэнтези
технофэнтези
рпг
5.00
рейтинг книги
Иной. Том 5. Адская работа

Моров. Том 4

Кощеев Владимир
3. Моров
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 4

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

Мент

Константинов Андрей Дмитриевич
8. Бандитский Петербург
Детективы:
боевики
8.58
рейтинг книги
Мент

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Четники. Королевская армия

Тимофеев Алексей Юрьевич
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Четники. Королевская армия