Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизКак создать нестандартную форму??? Найти похожие ветки
← →
Arnold © (2004-08-09 16:41) [0]Ну все сказано в subj.
← →
Алхимик © (2004-08-09 16:50) [1]Что есть "нестандартную"?
p.s. А давайте поиграем в телепатов...
← →
DK (2004-08-09 16:51) [2]Visible:=false;
Более нестандартной не придумаешь.Подойдет?
← →
VMcL © (2004-08-09 16:52) [3]>>Arnold © (09.08.04 16:41)
Нестандартными средствами.
← →
Kurtevich © (2004-08-09 16:54) [4]Автор наверно хочет круглую :) как в каком-нибудь медиа-плейере
← →
Iconka © (2004-08-09 16:56) [5]А кто сказал что круг - это не стандарт? И где вообще эти стандарты для форм описанны?
← →
Kurtevich © (2004-08-09 16:57) [6]
> Iconka © (09.08.04 16:56) [5]
эээ... forms.pas?... windows.pas?... ;)
← →
Arnold © (2004-08-09 17:00) [7]Да я имел ввиду форму нестандартной формы. Например, ну в виде звездочки =)
← →
Алхимик © (2004-08-09 17:00) [8]
> [5] Iconka © (09.08.04 16:56)
> А кто сказал что круг - это не стандарт? И где вообще эти
> стандарты для форм описанны?
Ну вдруг ГОСТ и до форм добрался :)
← →
Алхимик © (2004-08-09 17:04) [9]http://forprogrammers.narod.ru/faqs/Okno_luboy_formi.html
или у яндекса спроси про
"создание окон произвольной формы"
← →
Ega23 © (2004-08-09 17:04) [10]Ну вдруг ГОСТ и до форм добрался :)
Кстати, вполне могут.
← →
Кириешки © (2004-08-09 17:06) [11]>Arnold © (09.08.04 17:00) [7]
Для этого используются регионы вообще то
← →
wnew © (2004-08-09 17:06) [12]http://www.wnew.de/RundeFenster.zip
← →
DK (2004-08-09 17:11) [13]На тебе, в виде звездочки:
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:23) [14]Ха, звёздочка...
На тебе, в виде бабочки. :)
{ (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:26) [15]Алхимик © (09.08.04 17:23) [14]
Ваще круто!
← →
Алхимик © (2004-08-09 17:30) [16][15] DK (09.08.04 17:26)
"Как Windows превратить в illuminators – создание окон произвольной формы
средствами Windows API".
© Георгий Чернилевский
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c