Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Професиональное программирование


Информационный Канал Subscribe.Ru

Доброго утра.

Как и обещал вчера - открытие раздела Дельфи - статья 

Работа с регионами
------------------

Общее описание

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

С уважением, Гром.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное