首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

GDI+ 圖片自由縮放與八控制點拖曳調整大小範例

     編輯:Delphi

效果展示

縮放拖曳動畫

核心機制

  • 圖片以矩形 rt 定義位置與大小
  • RectToPoints 計算 8 個控制點 (四角+四邊中點)
  • 滑鼠按下判斷命中控制點索引 flag 或圖片內部 (移動模式)
  • 滑鼠移動時依 flag 調整 rt 對應邊/角,並同步更新控制點陣列
  • 重繪時畫圖片 + 畫 8 個小方塊控制點

關鍵代碼片段


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;

完整單元與 DFM

見原文件,含 RectToPoints 輔助函數、雙緩衝開啟、FormMouseUp 重置 flag 等完整邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved