Окно в виде кольца
{codecitation class=»brush: pascal; gutter: false;» width=»600px»}
Умея создавать окно эллипсовидной формы, для вас не составит большого труда слепить что-нибудь наподобие того, что показано на рисунке. Всё, что вам нужно сделать — это создать не один, а два региона и объединить их, используя функцию CombineRgn, т.е. теперь по созданию окна можно написать что-то вроде этого:
procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion, hsWindowRegion2: Integer;
begin
hsWindowRegion := CreateEllipticRgn(50, 50, 350, 200);
hsWindowRegion2:=CreateEllipticRgn(80, 80, 200, 150);
CombineRgn(hsWindowRegion, hsWindowRegion, hsWindowRegion2, RGN_DIFF);
SetWindowRgn(Handle, hsWindowRegion, true);
end;
Мы уже знаем какую функцию нужно использовать для объединения регионов, но как же она действует и что же ей нужно указывать?
Вводятся следующие параметры:
Дескриптор региона назначения,
Дескриптор первого региона источника,
Дескриптор второго региона источника,
Режим взаимодействия регионов источников.
В качестве режима мы указали константу RGN_DIFF, а использовать можем:
RGN_AND — Создает пересечение из двух смешанных областей,
RGN_COPY — Создает копию области, идентифицированной дескриптором первой области источника,
RGN_DIFF — Выводит части первой области источника, которые не пересекаются со второй,
RGN_OR — Создает объединение двух смешанных областей,
RGN_XOR — Создает объединение двух смешанных областей за исключением зоны перекрытия.
{/codecitation}