Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

Re: Linien-Cursor auf PainBox

  Alt 26. Sep 2004, 10:22
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat