Форум — Ответы     (  К темам )
 ?  nike: Как делают такие формы, как, например, у mediaPlayer'a в WinMe? (30-11-2002 01:14:27)
Как делают такие формы, как, например, у mediaPlayer'a в WinMe?
Я имею в виду непрямоугольные, как обычно, а произвольной формы.
 Владимир (30-11-2002 15:11:45)
Это все давно есть в ставшим уже стандартным FAQ по Builder-у.

Во-первых, как сделать форму любого вида
Во-вторых, как таскать форму не только за заголовок.


int __fastcall Sin(int a, int R)
{
double W=36*3.14159265/180.0; return R*sin(W*a);
}

int __fastcall Cos(int a, int R)
{
double W=36*3.14159265/180.0; return R*cos(W*a);
}

HRGN __fastcall GetStarReg(int X, int Y, int R)
{
TPoint P[5];
P[0]=Point(X, Y-R);
P[1]=Point(X-Sin(4, R), Y-Cos(4, R));
P[2]=Point(X-Sin(8, R), Y-Cos(8, R));
P[3]=Point(X-Sin(2, R), Y-Cos(2, R));
P[4]=Point(X-Sin(6, R), Y-Cos(6, R));
return CreatePolygonRgn(P, 5, WINDING);
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int X=Width/2, Y=Height/2;
HRGN R1, R2, R;
R=GetStarReg(X, Y, 100);
for(int i=1;i<10;i+=2)
{
R1=GetStarReg(X-Sin(i, 120), Y-Cos(i, 110), 70);
CombineRgn(R, R, R1, RGN_OR);
}

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);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
// таскаем форму за форму (вместо формы поместите этот код например
// в TLabel и будете таскать за TLabel и т.д.)
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
const int SC_DRAGMOVE = 0xF012;
if(WindowState!=wsMaximized)
{
ReleaseCapture();
Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
}
}


Готовый пример к C++Builder 6 — здесь 4 Кб
 nike (30-11-2002 20:45:32)
Владимир, благодарю.А на счёт того, что "Это все давно есть в ставшим уже стандартным FAQ по Builder-у" — я же у вас первый раз :). Спасибо.