Другие языки программирования и технологии

вопрос по delphi 7.

Как сделать окно круглым. овальным и т. д. т. е. изменить форму формы, ну или как то так.?
и так это очень интересная тема)
в type пиши
procedure WMNCHitTest(var Message: TWMNCHitTest);
message WM_NCHITTEST;
это чтобы форму передвигать при нажатии на неё в любом месте

Потом пиши для згзуки формы следующее:
Этот код и есть ома щита, ниже скину ещё пару, там уже этот стираешь ставишь другой, осталное тоже самое.
procedure TForm1.FormCreate(Sender: TObject);

var
R1, R2: HRgn;
begin
// Создаем линзу (пересечение двух эллипсов)
R1 := CreateElliPticRgn(-150,-300,363,400); // Задаем

// координаты эллипса. Верхняя левая точка формы имеет
// координаты 0,0

R2 := CreateEllipticRgn(363+150,-300,5,400);
CombineRgn(R1,R1,R2,RGN_AND); // Получаем пересечение

// Отрезаем сверху слева
R2:= CreateEllipticRgn(-40,-30,182,20);
CombineRgn(R1,R1,R2,RGN_DIFF); // Вычитаем

// Отрезаем сверху справа
R2:= CreateEllipticRgn(180,-30,363+40,20);
CombineRgn(R1,R1,R2,RGN_DIFF);

// Назначаем полученный регион форме
SetWindowRgn(Handle, R1, True);
end;

И после процедуру для перетаскивания окон
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
Message.Result := HTCAPTION;
end;

Вот и всё=)

вот это мой любимый:
procedure TForm1.FormCreate(Sender: TObject);
var
R1, R2 : HRgn;
P : array [0..2] of TPoint;
X : Word;
begin
// левое верхнее крыло
R1 :=CreateEllipticRgn(Round(-Width*0.4),
0,Round(Width*0.49),Round(Height*1.1));
// правое верхнее крыло
R2 :=CreateEllipticRgn(Round(Width*0.51),
0,Round(Width*1.4),Round(Height*1.1));
CombineRgn(R2,R1,R2,RGN_OR);
// отсекаем лишнее от верхних крыльев,
// остаются линзы на пересечении эллипсов

R1 :=CreateEllipticRgn(0,Round(-Height*0.3),
Width,Round(Height*0.71));
CombineRgn(R1,R1,R2,RGN_AND);

//эллипс - основа нижних крыльев
R2 :=CreateEllipticRgn(Round(Width*0.1),
Round(Height*0.65), Round(Width*0.9), Height);
CombineRgn(R1,R1,R2,RGN_OR);
// вырезаем эллипс - разрез между нижних крыльев
R2 :=CreateEllipticRgn(Round(Width*0.3),
Round(Height*0.7), Round(Width*0.7), Round(Height*1.5));
CombineRgn(R1,R1,R2,RGN_DIFF);

// вертикальный эллипс - туловище бабочки
R2 :=CreateEllipticRgn(Round(Width*0.46),
Round(Height*0.3), Round(Width*0.54),
Round(Height*0.8));
CombineRgn(R1,R1,R2,RGN_OR);

// голова - круг; за основу берем меньшую
// из двух величин - высоты и ширины окна
X := Width;
if Height < X then X := Height;
X := Round(X/18);
R2 :=CreateEllipticRgn(Round(Width*0.5)-X,
Round(Height*0.3)-X, Round(Width*0.5)+X,
Round(Height*0.3)+X);

CombineRgn(R1,R1,R2,RGN_OR);

// левый усик
P[0] := Point(Round(Width*0.5), Round(Height*0.3));
P[1] := Point(Round(Width*0.35), Round(Height*0.01));
P[2] := Point(Round(Width*0.355)+1, 0);
R2 := CreatePolygonRgn(P, 3, WINDING);
CombineRgn(R1,R1,R2,RGN_OR);

// правый усик
P[0] := Point(Round(Width*0.5), Round(Height*0.3));
P[1] := Point(Round(Width*0.655+1), Round(Height*0.01));
P[2] := Point(Round(Width*0.65), 0);
R2 := CreatePolygonRgn(P, 3, WINDING);

CombineRgn(R1,R1,R2,RGN_OR);

// острие на крыле слева снизу
P[0] := Point(Round(Width*0.15), Height);
P[1] := Point(Round(Width*0.2), Round(Height*0.8));
P[2] := Point(Round(Width*0.3), Round(Height*0.9));
R2 := CreatePolygonRgn(P, 3, WINDING);
CombineRgn(R1,R1,R2,RGN_OR);

// острие на крыле справа снизу
P[0] := Point(Round(Width*0.85), Height);
P[1] := Point(Round(Width*0.8), Round(Height*0.8));
P[2] := Point(Round(Width*0.7), Round(Height*0.9));

R2 := CreatePolygonRgn(P, 3, WINDING);
CombineRgn(R1,R1,R2,RGN_OR);

// Назначаем полученный регион форме
SetWindowRgn(Handle, R1, True);
end;

В свойстве AlphaBlend покапайся, получиться очень красиво!
Ермек Бертолеуов
Ермек Бертолеуов
1 089
Лучший ответ
HRGN reg;
reg=CreateRoundRectRgn(0,0,100,100,25,25);//(x1,y1,x2,y2,r1,r2-радиус закругления)
SetWindowRgn(Panel1->Handle,reg,true);

Закруглие панели на С++, не проблема перевести в делфи.