Вступление
Регионы – механизм задания произвольной конфигурации формы приложения. По умолчанию формы создаются в виде заполненных прямоугольников, но с помощью регионов им можно придать любую форму: круга, бублика и т.д.
Задача 1
Ограничить форму размерами определенного контрола
Решение
procedure TForm1.FormCreate(Sender: TObject);
var
FormRgn: THandle;
begin
BorderStyle := bsNone;
FormRgn := CreateRectRgn(Label1.left, Label1.top,
Label1.left + Label1.width, Label1.top + Label1.Height);
SetWindowRgn(Handle, FormRgn, True);
end;
Code language: Delphi (delphi)
Комментарий
Изменение стиля рамки формы упрощает получение координат для создания региона, который совпадает с размером компонента Label1.
Задача 2
Получить форму, используя в качестве шаблона изображение
Решение
procedure TForm1.CreateRegionFromBitmap(Bitmap: TBitmap;
TransparentColor: Tcolor; Range: Integer);
var
X, Y, FirstX: Integer;
LastBeen: boolean;
ComplexRGN, TempRGN: HRGN;
begin
ComplexRGN := CreateRectRgn(0, 0, 1, 1);
for Y := 0 to Bitmap.Height - 1 do
begin
FirstX := 0;
LastBeen := false;
for X := 0 to Bitmap.Width - 1 do
begin
if (abs(Bitmap.Canvas.Pixels[X, Y] - TransparentColor) > Range) and
(X <> pred(Bitmap.Width)) then
begin
if not LastBeen then
begin
LastBeen := true;
FirstX := X;
end;
end
else
begin
if LastBeen then
begin
LastBeen := false;
TempRGN := CreateRectRgn(FirstX, Y, X, Y + 1);
CombineRgn(ComplexRGN, ComplexRGN, TempRGN, RGN_OR);
DeleteObject(TempRGN);
end;
end;
end;
end;
SetWindowRgn(Form1.Handle, ComplexRGN, true);
end;
Code language: Delphi (delphi)
Комментарий
Разместите на форме нужное изображение в качестве фона, поверх которого можно расположить другие контролы. В методе FormCreate вызовите вышеописанный метод:
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateRegionFromBitmap(Image1.Picture.Bitmap, clWhite, 1);
end;
Code language: CSS (css)
Первый параметр – изображение, второй – цвет фона (прозрачности), третий параметр позволяет указывать точность определения фонового цвета (обычно равен 1 ).
Верификация
Delphi XE5, Win7