![]() |
Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Hallo,
mir ist kein richtiger Titel eingefallen. Ich habe mal eine ganz neue Anwendung gemacht um alle Faktoren meines Projekts auszuschließen. Also eine neue VCL Anwendung. 1. Eine ListBox auf die Form und ein paar Items hinzufügen 2. ListBox mit Ereignis OnMouseMove verbinden und dort ein "Beep" rein. 2. Ein TPanel auf die Form Folgender Code noch dazu:
Delphi-Quellcode:
Wenn man nun die Maus auf die ListBox bewegt, dann Beep es. Logisch. Lasst mal die Maus auf der ListBox liegen und danach mit den Pfeiltasten andere Items auswählen. Hier wird dann CNCommand / LBN_SELCHANGE gefeuert. Soll ja auch. Dort wird dann das Panel in der Breite immer ein wenig breiter gemacht. Das komische ist nun, dass dadurch OnMouseMove von der TListBox auch ausgeführt wird. Das soll aber nicht und ich verstehe es nicht, wieso das passiert.
type
TListBox = class(Vcl.StdCtrls.TListBox) private procedure CNCommand(var AMessage: TWMCommand); message CN_COMMAND; end; procedure TListBox.CNCommand(var AMessage: TWMCommand); begin inherited; if (AMessage.NotifyCode = LBN_SELCHANGE) then begin form1.panel1.width := form1.panel1.width + 10; end; end; procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin beep; end; Gruß Mic |
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Zitat:
|
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Update/Info
Man braucht noch nicht mal eine ListBox. Neue VCL Anwendung, ein Panel, ein Timer
Delphi-Quellcode:
Befindet sich der Mauszeiger auf der Form direkt (nicht auf dem Panel), wird ständig OnMouseMove gesendet, sobald das Panel in der Breite verändert wird. Dabei sollte doch nur OnMouseMove gesendet werden, wenn sich die Maus wirklich bewegt. Ich kapiere das nicht. *grübel grübel*
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin beep; end; procedure TForm1.Timer1Timer(Sender: TObject); begin panel1.Width := panel1.width + 10; end; |
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Die Frage dabei ist ja nur, woran wird die "scheinbare" Mouse-Bewegung erkannt?
Ich befürchte, das beim ändern der Größe, das ganze Fenster neu gezeichnet wird, sich dadurch kurzzeitig die Pixel bei der Mouse ändern und somit impliziert wird, das sich diese bewegt hat. Was passiert denn wenn du das Fenster (z.B. mit den Pfeiltasten) bewegst? Müsstest du natürlich programmieren, aber wenn onMouseMove dann auch auslöst, ist es wahrscheinlich wie ich oben geschrieben habe. |
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Zitat:
|
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Das wird ja immer besser :shock: Mal gut ich musste damit bisher nicht arbeiten^^
@MicMic: Was ist wenn du bei OnMouseMove die Zeigerposition speicherst und mit der vorigen dann immer vergleichst ob sie sich (wirklich) verändert hat und auch erst dann die Kommandos ausführst? |
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Zitat:
Zitat:
|
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Zitat:
|
AW: Was ist hier los? (TListBox, LBN_SELCHANGE, onMouseMove)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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