`Canvas.Rectangle` 會用畫筆繪製邊框**並用畫刷填充內部**,導致圖片被遮蓋。
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;
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;