Читаем О чём не пишут в книгах по Delphi полностью

SetPolyFillMode(Canvas.Handle, ALTERNATE);

Canvas.Polygon(Star);

Самое интересное здесь то, что обе звезды рисуются практически одинаково, меняется только режим заливки. Сначала с помощью простейшей тригонометрии вычисляются координаты вершин звезды, помещаются в массив Star и эта звезда рисуется с режимом заливки WINDING. При этом закрашиваются все точки, для которых выполняется условие, что луч, выпущенный из этой точки, пересекает контур многоугольника нечетное число раз, т. е. всю внутренность контура. Затем координаты вершин звезды смещаются вправо, и такая же звезда рисуется точно так же, но уже с режимом заливки ALTERNATE. В этом режиме закрашиваются только те точки, которые оказались между четной и нечетной сторонами многоугольника, и пятиугольник внутри звезды остается незакрашенным. Обратите внимание, что звезду мы здесь рисуем с помощью класса TCanvas, и только режимы заливки переключаем API-функциями.

Следующий шаг — это рисование черной прямоугольной рамки на фоне пересекающихся зеленых линий. Линии рисуются до рамки для того, чтобы показать, что центр рамки действительно остается прозрачным, а не заливается цветом фона. Сама рамка рисуется вызовом одной функции PolyPolygon, позволяющей за один раз нарисовать фигуру, ограниченную несколькими замкнутыми многоугольными контурами (листинг 1.36).

Листинг 1.36. Рисование рамки с использованием PolyPolygon

const

 Pts: array[0..7] of TPoint = (

(X: 40; Y: 230), (X: 130; Y: 230),

(X: 130; Y: 320), (X: 40; Y: 320),

(X: 60; Y: 250), (X: 60; Y: 300),

(X: 110; Y: 300), (X: 110; Y: 250));

 Cnt: array[0..1] of Integer = (4, 4);

// Следующая группа команд рисует прямоугольную рамку

Canvas.Pen.Color:= clLime;

Canvas.Pen.Width:= 3;

// Эти линии рисуются для того, чтобы показать, что

// центр рамки остается прозрачным.

Canvas.MoveTo(30, 220);

Canvas.LineTo(140, 330);

Canvas.MoveTo(140, 220);

Canvas.LineTo(30, 330);

Canvas.Pen.Color:= clBlack;

Canvas.Brush.Color:= clBlack;

// Функция PolyPolygon позволяет нарисовать несколько

// многоугольников одной командой. Второй параметр

// задает координат всех многоугольников, третий

// параметр задает массив, содержащий число вершин

// каждого из многоугольников. В нашем случае массив

// Cnt имеет значение (4, 4). Это значит, что первые

// четыре элемента массива PCs задают координаты первого

// многоугольника, следующие четыре — второго. Отметим,

// что указатели на массивы приходится передавать не

// очень простым способом: сначала нужно получить

// указатель на массив с помощью оператора @, а потом

// этот указатель разыменовать. Формальные параметры,

// определяющие указатели на массив, при импорте функции

// PolyPolygon в модуле Windows.dcu объявлены как

// нетипизированные параметры-переменные, поэтому

// компилятор не разрешает просто передать Pts и Cnt в

// качестве фактических параметров — он запрещает

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

// Это не совсем корректно, т. к. локальная

// типизированная константа — это на самом деле не

// константа, а глобальная переменная с локальной

// областью видимости. Тем не менее компилятор имеет

// такую особенность, которую приходится учитывать.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

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

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

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

Финансы / Программирование, программы, базы данных