Einzelnen Beitrag anzeigen

bernie110

Registriert seit: 13. Sep 2004
Ort: Uetersen
27 Beiträge
 
Delphi XE6 Professional
 
#1

Mauszeiger ändert sich nicht bei Paintbox.MouseDown

  Alt 31. Dez 2009, 19:26
Hallo,
ich will innerhalb einer Paintbox an einer bestimmte Stelle die linke Maustaste drücken, zu einer anderen Stelle gehen und dort die Maustaste wieder loslassen.

Der Cursor soll während der Mausbewegung seine Gestalt ändern und beim Tastendruck noch eine andere Gestalt annehmen und solange behalten, bis die Maustaste wieder losgelassen wird.
Wenn der Cursor die Grenzen der Paintbox überschreitet, soll er wieder die Default-Anzeige erhalten.

Es funktioniert, dass ohne gedrückte Maustaste der Mauszeiger im MouseMove-Event je nach Position seine Gestalt ändert.

Das Problem:
Sobald die linke Maustaste gedrückt wird, wird die Cursorform, die im MouseDown-Event programmiert ist, nicht angezeigt. Der zuletzt im MouseMove-Event gesetzte Zeiger bleibt "eingefroren" und das auch, wenn der Cursor über die Paintbox- oder sogar die Formular-Grenzen hinaus bewegt wird.

Hier ein Beispiel, in dem der Einfachheit halber beim MouseMove-Event der Zeiger in Abhängigkeit von der X-Koordinate gesetzt wird (in meiner Anwendung ist die Abfrage wesentlich komplizierter).

Delphi-Quellcode:
var
   Form_with_Paintbox: TForm;
   bAction: Boolean;

implementation

procedure TForm_with_Paintbox.FormActivate(Sender: TObject);
begin
   bAction := False;
end;

procedure TForm_with_Paintbox.PaintBox1MouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   Paintbox1.Cursor := crCross;
   bAction := True;
end;

procedure TForm_with_Paintbox.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
begin
   if not bAction then
      case ((X div 10) mod 3) of
      0: PaintBox1.Cursor := crDrag;
      1,2: PaintBox1.Cursor := crHandPoint;
      end;
end;

procedure TForm_with_Paintbox.PaintBox1MouseUp(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   PaintBox1.Cursor := crDefault;
   bAction := False;
end;
Daher meine Frage:
Wie kann ich es erreichen, dass bei MouseDown der Cursor die entsprechende Gestalt (crCross) annimmt und dann bis zum MouseUp-Event behält, zusätzlich aber auch an den Paintbox-Grenzen seine Default-Gestalt annimmt?

Vielen Dank schon einmal im Voraus!
Bernie110
---
programmiert mit Delphi2010
  Mit Zitat antworten Zitat