So schwer ist das doch garnicht.
Einfach in MouseDown die Maustaste abfragen und zwischenspeichern.
Und natürlich nicht zu vergessen: die Mausposition sollte man sich, für's onPaint auch noch merken.
Das folgende einfach OnMouseDown, OnMouseMove, OnMouseUp und OnPaint zuweisen.
Wenn du die // und bei OnMouseDown das erste IF wegmachst, dann kann man die Linie nur verschieben, wenn man in ihrer Nähe rumklickt.
Delphi-Quellcode:
Var CursorPos: Integer;
MTAktiv: Boolean;
Procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
If Button <> mbLeft Then Exit; // <<< dieses in der 2. Variante entfernen
//If (Button <> mbLeft) or (X > CursorPos + 10) or (X < CursorPos - 10) Then Exit;
CursorPos := X;
MTAktiv := True;
PaintBox1.Repaint;
End;
Procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Begin
//If (X > CursorPos - 10) and (X < CursorPos + 10) Then PaintBox1.Cursor := crSizeWE
//Else PaintBox1.Cursor := crDefault;
If not MTAktiv Then Exit;
CursorPos := X;
PaintBox1.Repaint;
End;
Procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
If not MTAktiv Then Exit;
CursorPos := X;
MTAktiv := False;
PaintBox1.Repaint;
End;
Procedure TForm1.PaintBox1Paint(Sender: TObject);
Begin
PaintBox1.Canvas.Brush.Color := clBtnFace;
PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
PaintBox1.Canvas.MoveTo(CursorPos, 0);
PaintBox1.Canvas.LineTo(CursorPos, PaintBox1.Height);
End;