![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать нестандартную форму???
Arnold © (2004-08-09 16:41:00)Ну все сказано в subj.
Алхимик (2004-08-09 17:30:00) [1][15] DK (09.08.04 17:26)
"Как Windows превратить в illuminators – создание окон произвольной формы
средствами Windows API".
© Георгий Чернилевский
DK (2004-08-09 17:26:00) [2]Алхимик © (09.08.04 17:23) [14]
Ваще круто!
Алхимик (2004-08-09 17:23:00) [3]Ха, звёздочка...
На тебе, в виде бабочки. :)
{ (c) George Chernilevsky }
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;
DK (2004-08-09 17:11:00) [4]На тебе, в виде звездочки:
procedure TForm1.FormCreate(Sender: TObject);
var
MR1, MR2: HRGN;
begin
MR1 := CreateEllipticRgn(Width div 4, 0, 3 * Width div 4, Height);
MR2 := CreateEllipticRgn(0, Height div 4, Width, 3 * Height div 4);
CombineRgn(MR1, MR1, MR2, RGN_XOR);
SetWindowRgn(Handle, MR1, true);
end;
Кириешки (2004-08-09 17:06:00) [5]>Arnold © (09.08.04 17:00) [7]
Для этого используются регионы вообще то
wnew (2004-08-09 17:06:00) [6]http://www.wnew.de/RundeFenster.zip
Алхимик (2004-08-09 17:04:00) [7]http://forprogrammers.narod.ru/faqs/Okno_luboy_formi.html
или у яндекса спроси про
"создание окон произвольной формы"
Ega23 (2004-08-09 17:04:00) [8]Ну вдруг ГОСТ и до форм добрался :)
Кстати, вполне могут.
Arnold (2004-08-09 17:00:00) [9]Да я имел ввиду форму нестандартной формы. Например, ну в виде звездочки =)
Алхимик (2004-08-09 17:00:00) [10]
> [5] Iconka © (09.08.04 16:56)
> А кто сказал что круг - это не стандарт? И где вообще эти
> стандарты для форм описанны?
Ну вдруг ГОСТ и до форм добрался :)
Kurtevich (2004-08-09 16:57:00) [11]
> Iconka © (09.08.04 16:56) [5]
эээ... forms.pas?... windows.pas?... ;)
Iconka (2004-08-09 16:56:00) [12]А кто сказал что круг - это не стандарт? И где вообще эти стандарты для форм описанны?
Kurtevich (2004-08-09 16:54:00) [13]Автор наверно хочет круглую :) как в каком-нибудь медиа-плейере
VMcL (2004-08-09 16:52:00) [14]>> Arnold © (09.08.04 16:41)
Нестандартными средствами.
DK (2004-08-09 16:51:00) [15]Visible:=false;
Более нестандартной не придумаешь.Подойдет?
Алхимик (2004-08-09 16:50:00) [16]Что есть "нестандартную"?
p.s. А давайте поиграем в телепатов...