Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 28.02.05 13:59 
Kann mir jemand erklären, warum das OnMouseMove-Ereignis gefeuert wird, wenn man sich mit der Maus (nicht bewegend) über einer Paintbox befindet und per Leertaste einen gefocusten TBitBtn betätigt?
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mo 28.02.05 15:09 
Also ich bekomm irgendwie immer ein OnMouseMove, auch wenn die Maus nur auf dem Ding draufhockt... Jetzt mal ohne irgendetwas mit TBitBtns zu machen... Dann ist es ja auch logisch, dass das mit TBitBtn passiert.... ;)

Du könntest einfach die Koordinaten speichern und schauen, ob's die alten sind und erst, wenn's ungleich ist, dein Ereignis. ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
(...)

var
Xold, Yold: Integer;

(...)

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Xold <> X or Yold <> Y then begin
Xold := X;
Yold := Y;
//ANWEISUNGEN
end;
end;

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.


Zuletzt bearbeitet von WeBsPaCe am Mo 28.02.05 15:31, insgesamt 1-mal bearbeitet
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 28.02.05 15:22 
Das ist aber Pfusch. Wenn Emule läuft wird auch manchmal zufällig an alle Controls ein MouseMove geschickt.

Edit: Zudem muss das OR und nicht AND heissen.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mo 28.02.05 15:30 
Spaceguide hat folgendes geschrieben:
Das ist aber Pfusch. Wenn Emule läuft wird auch manchmal zufällig an alle Controls ein MouseMove geschickt.

Hmm?? Wie?? Was hat denn Emule damit zu tun?? :?

Spaceguide hat folgendes geschrieben:
Edit: Zudem muss das OR und nicht AND heissen.

Danke... ;)

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mo 28.02.05 15:54 
WeBsPaCe hat folgendes geschrieben:
Hmm?? Wie?? Was hat denn Emule damit zu tun?? :?

Es gibt ein Handle Namens HWND_BROADCAST. Wenn man etwas daran schickt, dann feuert Windows das Event auf alle Handles ab. So etwas muss man bei DDE machen. Und wenn emule der Meinung ist es müsse so etwas tun, dann reagieren nun mal alle Anwendungen darauf.

Das mit dem MouseMove ist "normal". Ich würde es zwar auch eher anders sehen aber darüber kann man sich streiten. Ich weiß ja nicht was du in deinem MouseMove alles anstellst. Aber wenn es sich um zeichenoperationen etc. handelt solltest du es sowieso beschränken und nur dann ausführen, wenn es sich auch tatsächlich geändert hat. Manchmal muss man halt gewisse Vereinbarungen mit Windows treffen. Und ich persönlich reagiere da lieber ein wenig auf solche Umstände als das Windows mein Programm in die Knie zwingt. ;-)

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 28.02.05 15:58 
Ich weiss nicht, woher diese Effekte kommen, aber gestern wurden andauernd MouseMove-Events geschickt, solgange Emule lief.

Bei verändern der Größe (z.B. Width:=Width-1) eines Forms bekommt dieses auch ein MouseMove geschickt, schon komisch.

Richtig vernünftig lässt sich "es hat sich was geändert" nur abfragen, wenn man auch auf OnMouseLeave/Enter reagiert. Leider hat Borland da ein bisschen geschlampt.

Moderiert von user profile iconraziel: Beiträge zusammengefasst