Как создать окна непрямоугольной формы в Delphi?

procedure TForm1.FormCreate(Sender : TObject);
const
   W = 36 * PI / 180;
var
   R, R1, R2 : HRgn; 
   X, Y, I : Integer;
 
function S(A : Integer; R : Integer) : Integer;
begin
   Result := round(R * sin(W * A));
end;
 
function C(A : Integer; R : Integer) : Integer;
begin
   Result := round(R * cos(W * A));
end;
 
function GetStarReg(X, Y, R : Integer) : HRGN;
var
   P : array[0..4] of TPoint;
begin
   P[0] := Point(X, Y - R);
   P[1] := Point(X - S(4, R), Y - C(4, R));
   P[2] := Point(X - S(8, R), Y - C(8, R));
   P[3] := Point(X - S(2, R), Y - C(2, R));
   P[4] := Point(X - S(6, R), Y - C(6, R));
   Result := CreatePolygonRgn(P, 5, WINDING);
end;
 
begin
   X := Width div 2;
   Y := Height div 2;
   R := GetStarReg(X, Y, 100);
   I := 1;
   repeat
      R1 := GetStarReg(X - S(I, 120), Y - C(I, 110), 40);
      CombineRgn(R, R, R1, RGN_OR);
      inc(I, 2);
   until I > 9;
   R1 := GetStarReg(X, Y, 30);
   CombineRgn(R, R, R1, RGN_DIFF);
   R1 := CreateEllipticRgn(3, 3, Width - 6, Height - 6);
   R2 := CreateEllipticRgn(20, 10, Width - 20, Height - 10);
   CombineRgn(R1, R1, R2, RGN_DIFF);
   CombineRgn(R, R, R1, RGN_OR);
   SetWindowRgn(Handle, R, True);
end;
Kwork.ru - услуги фрилансеров от 500 руб.
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Добавить комментарий