Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mausbewegung (https://www.delphipraxis.net/154003-mausbewegung.html)

Muellermilchtrinker 24. Aug 2010 19:12

Delphi-Version: 2009

Mausbewegung
 
Hallo DP,

ich versuche gerade, dass wenn ich auf einem Panel die linke Maustaste gedrückt halte und dann die Maus bewege, dass dann die Bewegung regestriert wird.
Also wenn ich meine Maus 150 px bewege, dass dann der Wert zu einer Variable addiert wird.
Hoffe ihr könnt mir helfen.
Habs so versucht:
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var xold,yold:integer;
begin
  xold := x;
  yold := y;
  RotateX := RotateX + xold-x;
  RotateY := RotateY + yold-y;
end;
Das Problem ist ja, dass der Wert immer geändert wird, von meinem xold/yold. Wie kann ich das schützen???

Matze 24. Aug 2010 19:15

AW: Mausbewegung
 
Hallo,

merke dir im OnMouseDown die aktuellen Mauskoordinaten und addiere sie im OnMouseMove.

Muellermilchtrinker 24. Aug 2010 19:24

AW: Mausbewegung
 
Funktioniert danke.

rollstuhlfahrer 24. Aug 2010 21:21

AW: Mausbewegung
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1044662)
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var xold,yold:integer;
begin
  xold := x;
  yold := y;
  RotateX := RotateX + xold-x;
  RotateY := RotateY + yold-y;
end;

Das hier kann gar nicht funktionieren, weil x/yold lokale Variablen sind. Du berechnest also RotateX = rotateX + X - X => RotateX = RotateX (Hinweis: Der Wert hier ändert sich nicht). Du müsstest hier wenn schon globalere Variablen nehmen (also entweder globale Variablen oder Form-Member).

Bernhard

Matze 24. Aug 2010 21:27

AW: Mausbewegung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Genau so habe ich es vorhin auch schnell zusammen getippt.
Nun kann ich die Lösung ja zeigen. ;)

Sir Rufo 24. Aug 2010 23:03

AW: Mausbewegung
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1044679)
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1044662)
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var xold,yold:integer;
begin
  xold := x;
  yold := y;
  RotateX := RotateX + xold-x;
  RotateY := RotateY + yold-y;
end;

Das hier kann gar nicht funktionieren, weil x/yold lokale Variablen sind. Du berechnest also RotateX = rotateX + X - X => RotateX = RotateX (Hinweis: Der Wert hier ändert sich nicht). Du müsstest hier wenn schon globalere Variablen nehmen (also entweder globale Variablen oder Form-Member).

Bernhard

Das dieser Code gar nicht funktioniert hat nichts mit den lokalen Variablen zu tun.
Code:
Xold = x
Yold = y
Ok, dann schauen wir uns mal die nächsten Zeilen an
Code:
RotateX = RotateX + Xold - Xold => RotateX = RotateX
Wenn die Compilermagic hier richtig greift, dann wird daraus kein Code gemacht, weil ja eh nichts passiert.

mkinzler 25. Aug 2010 06:47

AW: Mausbewegung
 
Zitat:

Das dieser Code gar nicht funktioniert hat nichts mit den lokalen Variablen zu tun.
Sagen wir mal nicht nur. Selbst wenn der andere Fehler nicht wäre, würden die alten Werte sofort wegen des falschen Scopes vergessen


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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