Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Mauskoordinaten mit Mausbewegung herausfinden


Soapy - Fr 28.12.07 16:47
Titel: Mauskoordinaten mit Mausbewegung herausfinden
Also ich habe das Problem, dass ich die Mauskoordinaten herausfinden will.
Es soll automatisch die neuen Koordinaten der Maus in zwei Labels schreiben!
Genau so wie bei Bildbearbeitungsprogrammen, bei denen unten die Koordinaten angezeigt werden!

Mein Versuch sah bis jetzt so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TLineareFunktionen.KoordinatensystemClick(Sender: TObject);
var X,Y : Integer;
begin
   x:= ScreenToClient(Mouse.CursorPos).X;
   y:= ScreenToClient(Mouse.CursorPos).Y;
   X := X - 8 - (Koordinatensystem.ClientWidth div 2);
   Y := Y - 67 - (Koordinatensystem.ClientHeight div 2);
   Label1.Caption := IntToStr(X);
   Label2.Caption := IntToStr(Y);
end;



Klappt einwandfrei, sollte aber noch automatisch bei einer Mausbewegung und nicht bei einem Mausklick die Koordinaten in die Labels schreiben!

Kann mir da jemand helfen?


DrRzf - Fr 28.12.07 16:50

Schau dir mal die ereignisse

OnMouseMove (reagiert auf bewegung der maus)
OnMouseUp (reagiert auf loslassen der maustaste)
OnMouseDown (reagiert auf drüchen der maustaste)
an
OnMouseWheel reagiert aufs scrollrad.


Regan - Fr 28.12.07 16:53

Dazu noch was: OnMouseLeave (Beim Verlassen).


Soapy - Fr 28.12.07 16:56

Hab ich schon!

Hier ist mal der Quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TLineareFunktionen.FormMouseMove(Sender: TObject;Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x:= ScreenToClient(Mouse.CursorPos).X;
   y:= ScreenToClient(Mouse.CursorPos).Y;
   X := X - 8 - (Koordinatensystem.ClientWidth div 2);
   Y := Y - 67 - (Koordinatensystem.ClientHeight div 2);
   Label1.Caption := IntToStr(X);
   Label2.Caption := IntToStr(Y);
end;



Was mach ich falsch?


DrRzf - Fr 28.12.07 19:32

Du benutzt X,Y die bereits in der procedure übergeben werden.
Diese kannste aber nicht ändern da sie nicht als var übergeben werden.

ausserdem könntest du X,y direkt von deiner Form verwenden und bräuchtest dazu auch nicht mehr rummrechnen.

entweder so, dann bekommst die aktuelle position

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TLineareFunktionen.FormMouseMove(Sender: TObject;Button: TMouseButton;  
Shift: TShiftState; X, Y: Integer);  
begin  
//  x:= ScreenToClient(Mouse.CursorPos).X;  
//   y:= ScreenToClient(Mouse.CursorPos).Y;  
//   X := X - 8 - (Koordinatensystem.ClientWidth div 2);  
//   Y := Y - 67 - (Koordinatensystem.ClientHeight div 2);  
   Label1.Caption := IntToStr(X);  
   Label2.Caption := IntToStr(Y);  
end;


oder so, wenn du selbst noch mit den koords rechnen willst


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TLineareFunktionen.FormMouseMove(Sender: TObject;Button: TMouseButton;  
Shift: TShiftState; X, Y: Integer); 
var
  MyX,MyY : integer´;
begin  
   MyX := X - 8 - (Koordinatensystem.ClientWidth div 2);  //berechnung ans kordsys anpassen
   MyY := Y - 67 - (Koordinatensystem.ClientHeight div 2);  //berechnung ans koordsys anpassen
   Label1.Caption := IntToStr(MyX);  
   Label2.Caption := IntToStr(MyY);  
end;


jakobwenzel - Fr 28.12.07 19:57

Wohl kann man die ändern, es wird nur nicht nach außen gegeben. Nur bei Const kann man sie nicht ändern.


Zu erfahren, was nicht geht wäre auch noch schön.