![]() |
OnMouseUp - Maus beim bewegen loslassen
Hallo,
ist es möglich im OnMouseUp-Ereignis festzustellen, ob die Maustaste in der Bewegung losgelassen wurde oder aus dem Ruhestand? Ich kann ein Objekt in meinem Programm mit der Maus bewegen. Jetzt möchte ich aber, wenn man die linke Maustaste in der Bewegung loslässt, dass sich das Objekt weiterbewegt (man gibt sozusagen Anschwung), daher die Frage! Gruß, gr-ha |
Re: OnMouseUp - Maus beim bewegen loslassen
Eine Möglichkeit wäre, in dem Moment, wo du beginnst mit Schieben, eine Variable auf True zu setzen. Wenn die Taste losgelassen wird und die Variable ist True, dann wandert das Ding eben weiter ;)
|
Re: OnMouseUp - Maus beim bewegen loslassen
aber es soll ja nur weiterwandern, wenn man die maustaste direkt beim bewegen loslässt.
wenn man drückt, bewegt, kurz wartet und loslässt, dann soll es sich nicht weiterbewegen! |
Re: OnMouseUp - Maus beim bewegen loslassen
dann beim Anhalten die Variable wieder auf False setzen. Praktisch eine kleine Logik aufbauen. Sooo schwer ist das sicher nicht ;)
|
Re: OnMouseUp - Maus beim bewegen loslassen
Bloß wie kann ich festlegen, was beim anhalten passiert?
gibts da ein ereignis für? |
Re: OnMouseUp - Maus beim bewegen loslassen
Mir fällt da auf die Schnelle noch eine "Timer-Lösung" ein:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } FIsMoving: Boolean; FLastPos: TPoint; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FLastPos := Mouse.CursorPos; Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin FIsMoving := (Mouse.CursorPos.X <> FLastPos.X) or (Mouse.CursorPos.Y <> FLastPos.Y); FLastPos := Mouse.CursorPos; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled := false; if FIsMoving then ShowMessage('Schwuppdi!') else ShowMessage('Möööp'); end; end. |
Re: OnMouseUp - Maus beim bewegen loslassen
Die Zeit der letzten Bewegung merken, sollte doch auch gehen.
Die Mausbewegung ist doch auch nur ein diskretes Ereignis. Da musst du irgendwie mit Zeiten arbeiten. Edit: Ohne Timer dann vielleicht so
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin stampx:=x; stampy:=y; stamp:=gettickcount; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const output:array[boolean] of string=('Stillstand','Bewegung'); limit=2; var speed:double; divstamp:cardinal; begin divstamp:=gettickcount-stamp; if divstamp=0 then speed:=limit*50 else speed:=sqrt(sqr(stampx-mouse.CursorPos.X)+sqr(stampy-mouse.CursorPos.y))/(divstamp); edit1.text:=floattostr(speed)+' '+output[speed>limit]; end; end. |
Re: OnMouseUp - Maus beim bewegen loslassen
vielen Dank, werd ich mir mal anschauen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz