Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mauszeiger ändert sich nicht bei Paintbox.MouseDown (https://www.delphipraxis.net/145417-mauszeiger-aendert-sich-nicht-bei-paintbox-mousedown.html)

bernie110 31. Dez 2009 18:26


Mauszeiger ändert sich nicht bei Paintbox.MouseDown
 
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

VT 1. Jan 2010 15:19

Re: Mauszeiger ändert sich nicht bei Paintbox.MouseDown
 
versuchs doch mal mit Screen.Cursor...

bernie110 1. Jan 2010 17:26

Re: Mauszeiger ändert sich nicht bei Paintbox.MouseDown
 
Danke für den Tip!

Das ändert zwar den Mauszeiger bei MouseDown, aber noch nicht an den Grenzen.
Wenn ich daher zusätzlich die Grenzen abfrage:
Delphi-Quellcode:
if (X < Paintbox1.Left)
or (X > Paintbox1.Width)
or (Y < Paintbox1.Top)
or (Y > Paintbox1.Height)   
then
  Screen.Cursor := crDefault
else
  Screen.Cursor := crCross;
dann erreiche ich das gewünschte Verhalten.

Bernie110


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz