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

Delphi 在 Image 圖片上繪製矩形框:用 FrameRect 替代 Rectangle 避免填充覆蓋

     編輯:程式設計綜合問答

問題

`Canvas.Rectangle` 會用畫筆繪製邊框**並用畫刷填充內部**,導致圖片被遮蓋。

解決:FrameRect 只畫邊框

procedure TForm3.img1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  R: TRect;
begin
  if md then begin
    R := Rect(cx, cy, X, Y);
    img1.Canvas.Pen.Color := clRed;
    img1.Canvas.Pen.Width := 2;
    img1.Canvas.Brush.Style := bsClear;  // 關鍵:透明畫刷
    img1.Canvas.FrameRect(R);            // 僅繪製邊框
  end;
end;

關鍵點

  • `Brush.Style := bsClear` 使填充透明。
  • `FrameRect` 僅繪製矩形邊框,不填充內部。
  • 若需橡皮筋效果(拖動時實時更新),在 `MouseMove` 中先 `Invalidate` 重繪背景,再畫新框;或用 `PM_XOR` 模式畫兩次實現擦除。

完整橡皮筋示例

procedure TForm3.img1MouseMove(...);
begin
  if md then begin
    img1.Canvas.Pen.Mode := pmNotXor;  // 異或模式:畫兩次復原
    img1.Canvas.Rectangle(cx, cy, oldX, oldY); // 擦除舊框
    img1.Canvas.Rectangle(cx, cy, X, Y);       // 畫新框
    oldX := X; oldY := Y;
  end;
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved