1.任务:无边框的窗体,因为没有边框,不能直接移动了,就需要自己写代码了来改变窗体的坐标,从而达到移动窗体的目的;
2.需要添加一个Button1,加入退出程序的代码;
3.需要在IDE设置的属性:form1的color为蓝色;
2.打开IDE,新建VCL应用, 添加一个Button1,编写代码:
var
c: boolean; // 是否移动的开关
tx, ty: Integer; // 鼠标在窗体上按下时的坐标
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
c := false; // 窗体创建时,让其不可移动
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then // 判断按下的是不是鼠标左键
begin
c := true; // 按下鼠标左键后,可以移动
tx := X; // 记录下鼠标点击的开始坐标X
ty := Y; // 记录下鼠标点击的开始坐标 Y
Form1.Color := clRed; // 窗体颜色变为红色
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if c then
begin
Form1.Left := Form1.Left + X - tx; // 改变窗体的Left坐标 ,X-tx是相对开始时移动的距离
Form1.Top := Form1.Top + Y - ty; // 改变窗体的Top坐标 ,Y-ty是相对开始时移动的距离
// Screen.WorkAreaWidth是屏幕的可用区的大小,窗体在这个范围内是可见的。
if Form1.Left >= Screen.WorkAreaWidth - Form1.Width then // 如果移动到右边界了
Form1.Left := Screen.WorkAreaWidth - Form1.Width // 让窗体紧靠右边界
else if Form1.Left <= 0 then // 如果移动到左边界
Form1.Left := 0; // 让窗体紧靠左边界
if Form1.Top >= Screen.WorkAreaHeight - Form1.Height then // 如果移动到下边界了
Form1.Top := Screen.WorkAreaHeight - Form1.Height // 让窗体紧靠下边界
else if Form1.Top <= 0 then // 如果移动到上边界了
Form1.Top := 0; // 让窗体紧靠上边界
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
c := false; // 放开鼠标后,不可以移动
Form1.Color := clBlue; // 窗体颜色回复为蓝色
end;
示例图片如下: