Извините мне давно было любопытно форму можно сделать какую-нибудь другую - не квадратную?
Можно... В DRKB это описывается:
VCL -> TForm -> "Формы нестандартного вида"...
Тема переезжает в Дельфи ...
Извини а можешь мне статью отправить на почту nany11@rol.ru, я просто ее не могу найти, заране спасибо -)
Вот 3 статьй, а вообще что значит "не могу найти?"
Я привел полный путь к статьям... У тебя сам DRKB есть? Вот тут ссылка на него: http://forum.pascal.net.ru/index.php?showtopic=6361
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, Buttons, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen}
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public-Deklarationen}
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
{ удаляем заголовок и рамку }
Params.Style := Params.Style or ws_popup xor ws_dlgframe;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
FormRgn: hRgn;
begin
{clear form}
Form1.Brush.Style := bsSolid; //bsclear;
{ делаем круг формы }
GetWindowRgn(Form1.Handle, FormRgn);
{ удаляем старый объект }
DeleteObject(FormRgn);
{ делаем прямоугольник формы }
Form1.Height := 500;
Form1.Width := Form1.Height;
{ создаём круглую форму }
FormRgn := CreateRoundRectRgn(1, 1, Form1.Width - 1,
Form1.height - 1, Form1.width, Form1.height);
{ устанавливаем новое круглое окно }
SetWindowRgn(Form1.Handle, FormRgn, TRUE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.close;
end;
end.
procedure TForm1.FormCreate(Sender: TObject);
var
Region: HRGN;
begin
Region := CreateEllipticRgn(0, 0, 300, 300);
SetWindowRgn(Handle, Region, True);
end;
type
TForm1 = class(TForm)
// Данную процедуру будем использовать для задания
// формы окна
procedure FormCreate(Sender: TObject);
protected
// Данную процедуру необходимо переопределить,
// чтобы иметь возможность перемещать окно "мышкой"
// не только за за заголовок, который в данном
// случае отсутствует
procedure WMNCHitTest(var Message: TWMNCHitTest);message WM_NCHITTEST;
private
{ Private declarations }
public
{ Public declarations }
end;
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;
// Массив для создания полигона
begin
// Создаем начальный прямоугольник
R1 :=CreateRectRgn(0,0,270,233);
// Отрезаем сверху слева
R2:= CreateEllipticRgn(-20,-20,135+5,20);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Отрезаем сверху справа
R2:= CreateEllipticRgn(135-5,-20,270+20,20);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Отрезаем левый бок
R2:= CreateEllipticRgn(-15,10,8,233);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Отрезаем правый бок
R2:= CreateEllipticRgn(270-7,10,270+16,233);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Добавляем овал снизу
R2:= CreateEllipticRgn(0,150,270,320);
CombineRgn(R1,R1,R2,RGN_OR);
// Добавляем острие (треугольник) снизу
P[0] := Point(135-40, 310);
P[1] := Point(135+40, 310);
P[2] := Point(135, 335);
R2 := CreatePolygonRgn(P, 3, WINDING);
CombineRgn(R1,R1,R2,RGN_OR);
// Назначаем итоговый регион нашей форме
SetWindowRgn(Handle, R1, True);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
R1,R2 : HRgn;
P : array [0..2] of TPoint;
begin
R1:= CreateEllipticRgn(135-110, 45, 135-40, 105);
// Овал, образующий ухо
R2:= CreateEllipticRgn(135+40, 45, 135+110, 105);
// Овал, образующий ухо
CombineRgn(R1,R1,R2,RGN_OR);
// Отсекаем треугольником лишнюю часть овалов,
// тем самым завершаем формирование ушей
P[0] := Point(135-140, 40);
P[1] := Point(135+140, 40);
P[2] := Point(135, 140);
R2 := CreatePolygonRgn(P, 3, WINDING);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Формируем полумесяц рогов
R2:= CreateEllipticRgn(135-90, 0, 135+90, 100);
CombineRgn(R1,R1,R2,RGN_OR);
R2:= CreateEllipticRgn(135-70, -5, 135+70, 70);
CombineRgn(R1,R1,R2,RGN_DIFF);
// Формируем морду
R2:= CreateEllipticRgn(135-70, 60, 135+70, 170);
CombineRgn(R1,R1,R2,RGN_OR);
R2:= CreateEllipticRgn(135-40, 150, 135+40, 210);
CombineRgn(R1,R1,R2,RGN_OR);
// Назначаем итоговый регион нашей форме
SetWindowRgn(Handle, R1, True);
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;
Спасибо за помощь))) я скачаю его себе))
извини я все сделала первым сособом она почему то так и осталась квадратной?
Может, прикрепишь проект? (ехе-шник не надо)
Не имею понятия, почему у тебя не сработало... Вот мой проект:
A_form.rar ( 2.39 килобайт )
Кол-во скачиваний: 417
Вот что выходит:
да твой работает спасибо