Всё, что нам нужно, это 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;
Взято
из http://forum.sources.ru