Вход/Регистрация
Excel. Трюки и эффекты
вернуться

Гладкий Алексей Анатольевич

Шрифт:
...

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

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

Следующим примитивом, который мы рисуем, является отрезок. Процесс рисования осуществляется в два этапа. Сначала при помощи функции MoveToEx устанавливается начальная точка отрезка. Затем используем функцию Move То с указанием конечной точки.

...

MoveToEx(hCurDC, 10, 150, nil);

LineTo(hCurDC, 100, 220);

Четвертый параметр в функции MoveToEx – это переменная типа TPoint, в которую помещается предыдущее положение карандаша.

И последней рисуется дуга при помощи функции Arc.

...

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

В ней первые пять параметров соответствуют параметрам функции Rectangle, а последние четыре параметра задают начальную и конечную радиальные точки дуги.

После того как все операции вывода выполнены, требуется освободить все занятые ресурсы системы. Это осуществляется следующим образом:

...

SelectObject(hCurDC, hOldPen);

DeleteObject(hCurPen);

SelectObject(hCurDC, hOldPen);

DeleteObject(hCurPen);

ReleaseDC(Handle, hCurDC);

Сначала восстанавливаются карандаш и кисть для контекста устройства и удаляются созданные нами, а после освобождается и сам контекст устройства. Результат выполнения приложения приведен на рис. 6.1.

Рис. 6.1. Результат работы приложения «Рисование примитивов»

Здесь вы можете увидеть, что рисуется в итоге и как параметры функции влияют на это.

6.7. Работа с текстом

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

...

Листинг 6.2.

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

procedure TfmText.FormPaint(Sender: TObject);

var

hCurDC: HDC;

hCurFont, hOldFont: HFONT;

nOldMode: Integer;

sText: String;

begin

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

hCurDC := GetDC(Handle);

//создаем шрифт из шаблона

hCurFont := CreateFontIndirect(LogFontData);

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

hOldFont := SelectObject(hCurDC, hCurFont);

//устанавливаем новый режим вывода

nOldMode := SetBkMode(hCurDC, TRANSPARENT);

//устанавливаем цвет текста

SetTextColor(hCurDC, RGB(0, 0, 255));

//задаем текстовую строку

sText := \'Текст примера\

//выводим текст на экран

TextOut(hCurDC, Width div 2, Height div 2, PAnsiChar(sText),

Length(sText));

//восстанавливаем режим вывода

SetBkMode(hCurDC, nOldMode);

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

SelectObject(hCurDC, hOldFont);

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

DeleteObject(hCurFont);

//освобождаем общий контекст устройства

ReleaseDC(Handle, hCurDC);

end;

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

...

hCurFont:= CreateFontlndirect(LogFontData);

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

...

Function CreateFontlndirect(const If: LOGFONT): HFONT;

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

После создания шрифта выбираем его в контексте устройства.

...

hOldFont:= SelectObject(hCurDC, hCurFont);

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

...

nOldMode:= SetBkMode(hCurDC, TRANSPARENT);

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

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

...

Function SetBkMode(hdc: HDC; nBkMode: Integer): Integer;

  • Читать дальше
  • 1
  • ...
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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