Читаем Delphi. Трюки и эффекты полностью

Листинг 1.14.

Создание шестиугольника

procedure Make6Angle(width, height: Integer; var points: array

of TPoint);

begin

points[0].X:= 0;

points[0].Y:= height div 2;

points[1].X:= width div 3;

points[1].Y:= 0;

points[2].X:= 2 * (width div 3);

points[2].Y:= 0;

points[3].X:= width – 1;

points[3].Y:= height div 2;

points[4].X:= 2 * (width div 3);

points[4].Y:= height – 1;

points[5].X:= width div 3;

points[5].Y:= height – 1;

end;

Листинг 1.15 содержит процедуру создания пятиугольника (неправильного).

...

Листинг 1.15.

Создание пятиугольника

procedure Make5Angle(width, height: Integer; var points: array

of TPoint);

var a: Integer; //Сторона пятиугольника

begin

a:= width div 2;

points[0].X:= a;

points[0].Y:= 0;

points[1].X:= width – 1;

points[1].Y:= a div 2;

points[2].X:= 3 * (a div 2);

points[2].Y:= height – 1;

points[3].X:= a div 2;

points[3].Y:= height – 1;

points[4].X:= 0;

points[4].Y:= a div 2;

end;

Пятиугольная звезда, используемая как область отсечения формы, создается при помощи приведенной в листинге 1.15 процедуры Make5Angle. После изменяется порядок следования вершин пятиугольника, чтобы их обход при построении региона выполнялся так, как рисуется звезда карандашом на бумаге (например, 1-3-5-2-4) (листинг 1.16).

...

Листинг 1.16.

Создание пятиугольной звезды

procedure MakeStar(width, height: Integer; var points: array

of TPoint);

begin

Make5Angle(width, height, points);

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

//порядку,а через одну

Swap(points[1], points[2]);

Swap(points[2], points[4]);

Swap(points[3], points[4]);

end;

Процедура MakeStart (листинг 1.16) использует дополнительную процедуру Swap, меняющую местами значения двух передаваемых в нее аргументов. Процедура Swap реализуется чрезвычайно просто и потому в тексте книги не приводится.

Комбинированные регионы

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

«Дырявая» форма

Этот простейший пример сомнительной полезности предназначен для знакомства с операциями над регионами. Здесь применяется только одна из возможных операций – операция XOR для формирования «дырок» в форме (рис. 1.8).

Рис. 1.8. «Дырки» в форме

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

...

Листинг 1.17.

Создание «дырок» в форме

procedure TfrmHole.FormCreate(Sender: TObject);

var

rgn1, rgn2: HRGN; //"Регионы-дырки" в форме

formRgn: HRGN;

begin

//Создание региона для формы

formRgn := CreateRectRgn(0, 0, Width – 1, Height – 1);

//Создание регионов для «дырок»

rgn1 := CreateEllipticRgn(10, 10, 100, 50);

rgn2 := CreateRoundRectRgn(10, 60, 200, 90, 10, 10);

//Создание «дырок» в регионе формы

CombineRgn(formRgn, formRgn, rgn1, RGN_XOR);

CombineRgn(formRgn, formRgn, rgn2, RGN_XOR);

SetWindowRgn(Handle, formRgn, True);

//Регионы для «дырок» больше не нужны

DeleteObject(rgn1);

DeleteObject(rgn2);

end;

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

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

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

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

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

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

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

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

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

Все жанры