Другие языки программирования и технологии
вопрос по delphi 7.
Как сделать окно круглым. овальным и т. д. т. е. изменить форму формы, ну или как то так.?
и так это очень интересная тема)
в type пиши
procedure WMNCHitTest(var Message: TWMNCHitTest);
message WM_NCHITTEST;
это чтобы форму передвигать при нажатии на неё в любом месте
Потом пиши для згзуки формы следующее:
Этот код и есть ома щита, ниже скину ещё пару, там уже этот стираешь ставишь другой, осталное тоже самое.
procedure TForm1.FormCreate(Sender: TObject);
var
R1, R2: HRgn;
begin
// Создаем линзу (пересечение двух эллипсов)
R1 := CreateElliPticRgn(-150,-300,363,400); // Задаем
// координаты эллипса. Верхняя левая точка формы имеет
// координаты 0,0
R2 := CreateEllipticRgn(363+150,-300,5,400);
CombineRgn(R1,R1,R2,RGN_AND); // Получаем пересечение
// Отрезаем сверху слева
R2:= CreateEllipticRgn(-40,-30,182,20);
CombineRgn(R1,R1,R2,RGN_DIFF); // Вычитаем
// Отрезаем сверху справа
R2:= CreateEllipticRgn(180,-30,363+40,20);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Назначаем полученный регион форме
SetWindowRgn(Handle, R1, True);
end;
И после процедуру для перетаскивания окон
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
Message.Result := HTCAPTION;
end;
Вот и всё=)
вот это мой любимый:
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;
В свойстве AlphaBlend покапайся, получиться очень красиво!
в type пиши
procedure WMNCHitTest(var Message: TWMNCHitTest);
message WM_NCHITTEST;
это чтобы форму передвигать при нажатии на неё в любом месте
Потом пиши для згзуки формы следующее:
Этот код и есть ома щита, ниже скину ещё пару, там уже этот стираешь ставишь другой, осталное тоже самое.
procedure TForm1.FormCreate(Sender: TObject);
var
R1, R2: HRgn;
begin
// Создаем линзу (пересечение двух эллипсов)
R1 := CreateElliPticRgn(-150,-300,363,400); // Задаем
// координаты эллипса. Верхняя левая точка формы имеет
// координаты 0,0
R2 := CreateEllipticRgn(363+150,-300,5,400);
CombineRgn(R1,R1,R2,RGN_AND); // Получаем пересечение
// Отрезаем сверху слева
R2:= CreateEllipticRgn(-40,-30,182,20);
CombineRgn(R1,R1,R2,RGN_DIFF); // Вычитаем
// Отрезаем сверху справа
R2:= CreateEllipticRgn(180,-30,363+40,20);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Назначаем полученный регион форме
SetWindowRgn(Handle, R1, True);
end;
И после процедуру для перетаскивания окон
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
Message.Result := HTCAPTION;
end;
Вот и всё=)
вот это мой любимый:
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;
В свойстве AlphaBlend покапайся, получиться очень красиво!
HRGN reg;
reg=CreateRoundRectRgn(0,0,100,100,25,25);//(x1,y1,x2,y2,r1,r2-радиус закругления)
SetWindowRgn(Panel1->Handle,reg,true);
Закруглие панели на С++, не проблема перевести в делфи.
reg=CreateRoundRectRgn(0,0,100,100,25,25);//(x1,y1,x2,y2,r1,r2-радиус закругления)
SetWindowRgn(Panel1->Handle,reg,true);
Закруглие панели на С++, не проблема перевести в делфи.
Похожие вопросы
- 2 простых вопроса про Delphi 7
- Что предпочтительней Delphi 7 или Delphi 2009? И почему?
- Люди у кавонить есть прога на Delphi 7??
- Какой язык лучше учить Delphi 7 или C++ ?
- Язык delphi 7 устарел ??? просто хотел учить delphi 7 но сейчас кто то сказал что устарел
- Несколько вопросов по Delphi
- Какова стоимость? Какова стоимость Borland Delphi 7? И что лучше delphi или lazarus? И почему?
- delphi 7, snake
- Какую версию Delphi лучше использовать? В чём разница XE версии от обычной? XE2,3,4,5,6 или Delphi 7?
- вопрос по delphi