Привет ребят, залез тут на сайт скинов AlphaControls и в надежде найти новые скины увидил такое:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Сразу же подался в гугле, выдало совсем другое (круглые формы) , но там же не круглая форма, и не сама форма, а скин такой . Скачал Demo , открыл и не увидил не чего такого крутого :0 .
В скин манаджере выбрано 2 скина, как я понел они как то соединилися (:
Мб кто знает как создать такую форму или скин, объясните пожалуйста
Все просто. Есть уже процедура SetWindowRgn, она позволяет создавать окна какой угодно формы. Ругион автоматически уничтожается при закрытии окна. Вот пример использования:
Код:
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;
________________
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';