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