Доброго утра.
Как и обещал вчера - открытие раздела Дельфи - статья
Работа с регионами
------------------
Общее описание
Windows API предоставляет набор функций, позволяющих описать произвольную
(при желании - достаточно сложную) геометрическую фигуру, которая потом может
использоваться
при работе с окнами, или, в терминологии Delphi, элементами управления. Использование
может заключаться, например, в отрисовке на холсте, в задании специфического
региона обновления окна, и т.д. Помимо таких вот относительно невинных возможностей,
технология регионов позволяяет также глумиться над благородными
очертаниями любого потомка TWinControl (иными словами, любым контролом, имеющим
Handle, aka TForm, TButton, и т.д.). Особенно широко регионы используются в
формах, при их отрисовке и обновлении.
Итак, для начала, давайте разберёмся,
что такое этот самый регион.
Win32 SDK регион определяет следующим образом:
В Microsoft Windows регионом называется прямоугольник, полигон или эллипс
(либо комбинация двух или более этих фигур), которые могут быть заполненны,
нарисованы, инвертированы, обрамлены и могут использоваться для определения
местонахождения курсора (имеется в виду, что есть стандартная функция,
определяющая входит ли точка (X,Y) в наш регион).
В SDK упомянуты три основных типа регионов: прямоугольные, эллиптические,
и полигональные. О чётвёртом типе, прямоугольном с закруглёнными краями, стыдливо
умалчивается, ну да и фиг с ним. Видимо это связано с тем, что его можно получить
из первых двух. Дело в том, что регионы могут комбинироваться между собой с
применением логических операций OR, XOR и т.д. Но к этому мы вернёмся позже.
С точки зрения Windows, регион является обыкновенным объектом GDI, задаваемым
дескриптором HRGN. В Delphi также доступен этот тип, и объявление его выглядит
следующим образом:
HRGN = type LongWord;
Как видим, ничего сверхъестественного. По сути это указатель на некую структуру
в памяти. Структура эта описана следующим образом:
TRgnData = _RGNDATA;
_RGNDATA = record
rdh: TRgnDataHeader;
Buffer: array[0..0] of CHAR;
Reserved: array[0..2] of CHAR;
end;
Продолжение здесь: http://club.shelek.com/viewart.php?id=98
Кроме этого выложены две книги:
Перевод на русский книги "Мифический человеко-месяц" качать здесь http://club.shelek.com/download.php?id=67
Сама книга гремела в свое время - думаю вам пригодится - проектирование крупных
систем.
И вторая - английский язык - книга Programming ADO от Microsoft.
Качать здесь: http://club.shelek.com/download.php?id=68
С уважением, Гром.