Форум — Ответы ( К темам )
? | 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-у" — я же у вас первый раз :). Спасибо.
|