15.Delphi 移動無邊框的窗體

1.任務(wù):無邊框的窗體,因為沒有邊框,不能直接移動了,就需要自己寫代碼了來改變窗體的坐標,從而達到移動窗體的目的;
2.需要添加一個Button1,加入退出程序的代碼;
3.需要在IDE設(shè)置的屬性:form1的color為藍色;
2.打開IDE,新建VCL應(yīng)用, 添加一個Button1,編寫代碼:

var
  c: boolean; // 是否移動的開關(guān)
  tx, ty: Integer; // 鼠標在窗體上按下時的坐標

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  c := false;    // 窗體創(chuàng)建時,讓其不可移動
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; // 窗體顏色變?yōu)榧t色
  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是屏幕的可用區(qū)的大小,窗體在這個范圍內(nèi)是可見的。
    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; // 窗體顏色回復(fù)為藍色
end;

示例圖片如下:


15.1.jpg
15.2.jpg
15.3.jpg
15.4.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容