Linie löschen

fluessig

Royal Blue
Hi,
ich möchte zwischen einem Punkt der beim MouseDown Ereignis festgelegt wird und der aktuellen Mausposition eine Linie ziehen. Mit folgendem Code gelingt dies auch, aber ich mal bei jeder Mausbewegung eine neue Linie ohne die alte zu löschen.
Code:
//mdown wird global als Integer deklariert

procedure TForm1.FormCreate(Sender: TObject);
begin
  mdown := -1;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mdown := 0;
  GetCursorPos(CursorPos);
  lbl_StartPos.Caption := Format('The cursor is at (%d, %d)', [CursorPos.X, CursorPos.Y]);
  startX := CursorPos.X;
  startY := CursorPos.Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  dc : hdc;
begin
  if mdown = 0 then
  begin
    //Linie löschen? 

    GetCursorPos(CursorPos);
    endX := CursorPos.X;
    endY := CursorPos.Y;
    
    //Linie zeichnen
    dc := GetDc(0);
    MoveToEx(Dc, startX, startY, nil);
    LineTo(Dc, endX, endY);
    
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mdown := -1;
end;
Wie bekomm ich die alte Linie wieder weg?
 
Punkte der alten Linie merken und dann zuerst die alte Linie noch mal
zeichnen, allerdings im DC den Stift auf Löschfarbe setzen
vop
 
Anderer Weg:

verwende die Schreibfarbe aber ändere den Style vom pen in psClear

Pen.Style:=psClear

dann sollte es glaub ich gehen.
vop
 

Neue Beiträge

Zurück