Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OnMouseUp - Maus beim bewegen loslassen (https://www.delphipraxis.net/104115-onmouseup-maus-beim-bewegen-loslassen.html)

gr-ha 27. Nov 2007 16:45


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

Progman 27. Nov 2007 16:53

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 ;)

gr-ha 27. Nov 2007 16:56

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!

Progman 27. Nov 2007 16:59

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 ;)

gr-ha 27. Nov 2007 17:01

Re: OnMouseUp - Maus beim bewegen loslassen
 
Bloß wie kann ich festlegen, was beim anhalten passiert?
gibts da ein ereignis für?

DeddyH 27. Nov 2007 17:07

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.

sirius 27. Nov 2007 17:15

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.

gr-ha 27. Nov 2007 18:25

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