Du könntest das z.B. so lösen:
Es ist ziemlich ähnlich zu deinem Code, nur werden zuerst gezeichnete Linien wieder "entfernt".
Eben durch erneutes Zeichnen mittels Pen.Mode - pmNotXor.
Hoffentlich hilft dir das weiter

Lg Oli
Delphi-Quellcode:
var
StartPosition: TPoint;
EndPosition: TPoint;
DoNotRunFirstTime: Boolean;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) then
begin
StartPosition := Point(X, Y);
DoNotRunFirstTime := True;
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (ssLeft in Shift) then
with TImage(Sender).Picture.Bitmap.Canvas do
begin
Pen.Mode := pmNotXor;
if (not DoNotRunFirstTime) then
begin
MoveTo(StartPosition.X, StartPosition.Y);
LineTo(EndPosition.X, EndPosition.Y);
end else
DoNotRunFirstTime := False;
EndPosition := Point(X, Y);
MoveTo(StartPosition.X, StartPosition.Y);
LineTo(EndPosition.X, EndPosition.Y);
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) then
with TImage(Sender).Picture.Bitmap.Canvas do
begin
MoveTo(StartPosition.X, StartPosition.Y);
LineTo(EndPosition.X, EndPosition.Y);
end;
end;