15.Delphi 移动无边框的窗体

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;

示例图片如下:


15.1.jpg
15.2.jpg
15.3.jpg
15.4.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容