procedure TForm1.FormCreate(Sender: TObject);
var
R: HRgn;
P : array[0..2] of TPoint;
begin
P[0] := Point(0,0); // пределим точки для полигона и
P[1] := Point(200,0);
P[2] := Point(100,200);
R := CreatePolygonRgn(P, 3, WINDING); // зададим его
SetWindowRgn(Handle, R, True);
end;
Интерфейс в делфи
Всем здарова!Подскажите мне как сделать прогу в Делфи более графичной,то есть как рисовать нестандартные формы не типо там с закругленными концами,окно типа звезда,эллипс.Мне нужно что-то более весомое.Срочно для авторана надо!!!
Поищи факи, в них все подробно расписано. Есть компоненты для навешивания скинов на форму.
Код:
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);
color:=clred;
end;
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);
color:=clred;
end;
для подробностей смотри MSDN
вокруг него белый фон ставишь
form1.transparentcolor=true;
form1.transparentcolorvalue=clwhite;
растягиаешь рисунок на всю форму
потом можно убрать заголовок формы
и добавить возвожность перемещения формы за её тело
и вот пожалуйста твоя форма ввиде микки мауса
Цитата:
form1.transparentcolor=true;
form1.transparentcolorvalue=clwhite;
на win'98/ME работать не будет... не знаю по части 2000...
а зачем тебе нужны win'98/ME ими уже никто не пользуется
Пользуются, ещё как пользуются!
В основном - XP, но встречаються люди(не очень редко!), которые пользуються 98...
но всё равно я когда делаю программы даже не думаю что кто то её может запустить под win98.а если всё же кто то запустит под 98 и произойдёт глюк то выведу сообщение что под 98 эта прога не работает
Всем спасибо за предоставленную помощь...А как вам прога моя AutomaticOpen???
Сами понимаете зачем!?
и добавить возвожность перемещения формы за её тело
[/QUOTE]
Че за свойство.?
у него нет такого свойства надо просто обрабатывать события onmousedown, onmousemove, onmouseup
Цитата:
надо просто обрабатывать события onmousedown, onmousemove, onmouseup
или сказать обработчику, что на самом деле мышкой ткнули не на клиентской части, а на заголовке формы