Окно в виде кольца
Умея создавать окно эллипсовидной формы, для вас не составит большого труда слепить что-нибудь наподобие того, что показано на рисунке. Всё, что вам нужно сделать - это создать не один, а два региона и объединить их, используя функцию 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 - Создает объединение двух смешанных областей за исключением зоны перекрытия.
|