
rt 定義位置與大小RectToPoints 計算 8 個控制點 (四角+四邊中點)flag 或圖片內部 (移動模式)flag 調整 rt 對應邊/角,並同步更新控制點陣列
procedure TForm1.FormMouseDown(...);
var i: Integer;
begin flag := -1;
for i := 0 to 7 do
if PtInRect(Bounds(pts[i].X-3, pts[i].Y-3, 6, 6), Point(X,Y)) then begin flag:=i; Break; end;
if flag = -1 then begin ClickImg := PtInRect(rt, Point(X,Y)); Repaint; end
else begin x1:=X; y1:=Y; end;
end;
procedure TForm1.FormMouseMove(...);
begin
if flag = -1 then Exit;
case flag of
0: begin Inc(rt.Left, X-x1); Inc(rt.Top, Y-y1) end; // 左上角
1: begin Inc(rt.Left, X-x1) end; // 左邊中
2: begin Inc(rt.Left, X-x1); Inc(rt.Bottom, Y-y1) end;// 左下角
3: begin Inc(rt.Bottom, Y-y1) end; // 下邊中
4: begin Inc(rt.Right, X-x1); Inc(rt.Bottom, Y-y1) end;// 右下角
5: begin Inc(rt.Right, X-x1) end; // 右邊中
6: begin Inc(rt.Right, X-x1); Inc(rt.Top, Y-y1) end; // 右上角
7: begin Inc(rt.Top, Y-y1) end; // 上邊中
end;
x1:=X; y1:=Y; RectToPoints; Repaint;
end;
見原文件,含 RectToPoints 輔助函數、雙緩衝開啟、FormMouseUp 重置 flag 等完整邏輯。