AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Mauszeiger ändert sich nicht bei Paintbox.MouseDown
Thema durchsuchen
Ansicht
Themen-Optionen

Mauszeiger ändert sich nicht bei Paintbox.MouseDown

Ein Thema von bernie110 · begonnen am 31. Dez 2009 · letzter Beitrag vom 1. Jan 2010
Antwort Antwort
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, 18: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
VT

Registriert seit: 9. Dez 2002
11 Beiträge
 
#2

Re: Mauszeiger ändert sich nicht bei Paintbox.MouseDown

  Alt 1. Jan 2010, 15:19
versuchs doch mal mit Screen.Cursor...
  Mit Zitat antworten Zitat
bernie110

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

Re: Mauszeiger ändert sich nicht bei Paintbox.MouseDown

  Alt 1. Jan 2010, 17:26
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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