Как создавать не квадратные формы и контролы
Всё, что нам нужно, это HRGN и дескриптор (handle)
элемента управления. SetWindowRgn имеет три параметра:
дескриптор окна, которое будем менять, дескритор
региона и булевый (boolean) параметр, который
указывает - перерисовывать или нет после
изменения. Как только у нас есть дескриптор и
регион, то можно вызвать SetWindowRgn(Handle, Region, True) и
вуаля!
Здесь приведён пример использования функции
BitmapToRgn (описанной в примере Как создать
регион(HRNG) по маске).
Заметьте, что Вы не должны освобождать регион при
помощи DeleteObject, так как после вызова SetWindowRgn
владельцем региона становится операционная
система.
var
MaskBmp: TBitmap;
begin
MaskBmp := TBitmap.Create;
try
MaskBmp.LoadFromFile('FormShape.bmp');
Height := MaskBmp.Height;
Width := MaskBmp.Width;
// ОС владеет регионом, после вызова
SetWindowRgn
SetWindowRgn(Self.Handle, BitmapToRgn(MaskBmp), True);
finally
MaskBmp.Free;
end;
end;
|