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