Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit MouseMove (https://www.delphipraxis.net/131096-problem-mit-mousemove.html)

daredd 18. Mär 2009 20:34


Problem mit MouseMove
 
Hallo Freunde,

ich habe mal wieder ein Problem. In meinem Programm habe ich ein TImage auf dem ich nun schon Punkte setzen kann mit MouseDown.

Nun will ich aber diesen die Position des Punktes veränder, dazu dachte ich das ich den bestimme ob der Punkt ausgewählt ist (also selected), wenn ja soll er den Punkt so lange der Maus hinterlaufen bis ich ihn wieder DeSelecte.

Ich hab mir das ganze mit MouseMove gedacht, aber irgedwie klappt das nicht, der Punkt bewegt sich nicht um einen Pixel.

Delphi-Quellcode:
procedure TFormEditor.TheImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i : integer;
begin

for i := 0 to List.Count - 1 do
         if (List.GetItem(i) is TMPoint) then
            if TMPoint(List.GetItem(i)).Selected then begin
            while TMPoint(List.GetItem(i)).Selected do // Schleife damit der Punkt der Maus folgt!!!!???
            TMPoint(List.GetItem(i)).ResetPos(X, Y); TMPoint(List.GetItem(i)).Paint;
            end;
            RefreshStatistic;
end;
Kann mir einer sagen was da Falsch ist?

Cyf 18. Mär 2009 21:23

Re: Problem mit MouseMove
 
Was ist List, was ist TMPoint?

[Eidt]Wobei der Fehler denke ich eher darin liegt, dass die Schleife nie verlassen wird, somit nicht zur Messageschleife zurückgekehrt wird und damit auch keine neuen Mausevents geliefert werden.

daredd 18. Mär 2009 21:26

Re: Problem mit MouseMove
 
List ist eine Liste in der TMPoints gespeichert sind, die wiederum Die Punkte auf dem Image darstellen.

Soll ich soll ich den die schleife sonst verlassen?

Uwe Raabe 19. Mär 2009 07:05

Re: Problem mit MouseMove
 
Zitat:

Zitat von daredd
Soll ich soll ich den die schleife sonst verlassen?

Die Schleife ist hier gar nicht notwendig (eher kontraproduktiv, wie man sieht)! Der MouseMove Event wird bei jeder Mausbewegung aufgerufen und nur dann musst du ja auf die Positionsänderung reagieren. Also lass die while Schleife weg und schau mal, was als nächstes nicht funktioniert...

daredd 19. Mär 2009 08:38

Re: Problem mit MouseMove
 
Ok, ich werde das mal ausprobieren.

daredd 19. Mär 2009 08:50

Re: Problem mit MouseMove
 
Ich habe das jetzt so zu stehen, also ohne Schleife:
Delphi-Quellcode:
procedure TFormEditor.TheImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i : integer;
begin

for i := 0 to List.Count - 1 do
         if (List.GetItem(i) is TMPoint) then
            if TMPoint(List.GetItem(i)).Selected then begin
            TMPoint(List.GetItem(i)).ResetPos(X, Y);
            TMPoint(List.GetItem(i)).Paint;
            end;
            RefreshStatistic;
end;
Und es geht trozdem nicht, der Punkt kommt einfach nicht aus dem knick? Ist vielleicht das "live-zeichnen" auf dem Image verboten.

Hab ich das eigentlich Richtig verstanden? MouseMove, MouseDown, MouseLeave, ... das sind alles reservieter Methoden und wenn ich die einfach an den Namen des Objektes hänge führt er die Mouse-Methoden aus.
Ich habe mal in das TImage geschaut und dor nur OnMouseMove, OnMouseDown gefunden. Bei meiner TheImageMouseDown-Methode funktioniert alles, aber bei dieser hier (TheImageMouseMove) nicht.

Kann mich einer aufklären?

Blup 19. Mär 2009 15:32

Re: Problem mit MouseMove
 
Nein, so was wie du dir "reservieter Methoden" vorstellst gibt es nicht.
Die Eventmethoden werden dem Objekt als Zeiger angewiesen, entweder im Objektinspektor oder Programmgesteuert:

TheImage.OnMouseMove := TheImageMouseMove;

Der Name der Methode ist dabei egal, aber die Parameter müssen stimmen.


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