Entwickler-Ecke
Windows API - MouseWheel - Drehrichtung
M. Raab - Mo 21.04.03 14:41
Titel: MouseWheel - Drehrichtung
Hallo NG,
irgendwas mache ich falsch :nixweiss:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| {------------------------------------------------------------------} { Message-Behandlung des Programs festlegen } {------------------------------------------------------------------} function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case (Msg) of WM_MOUSEWHEEL: begin if Drehrichtung>HIWORD(wPARAM) then begin Drehrichtung:=HIWORD(wPARAM); skalar:=skalar-0.05; form1.normierung; result:=0; end; if Drehrichtung<HIWORD(wPARAM) then begin Drehrichtung:=HIWORD(wPARAM); skalar:=skalar+0.05; form1.normierung; result:=0; end; end; WM_CREATE: |
Die Variabel DREHRICHTUNG ist global und auf 120 gestellt. Ich möchte damit vergrössern bzw. verkleinern, je nachdem in welche Richtung das Rad gedreht wird. Problem nun: wenn ich die Maus um einen Zacken dreh (egal in welche Richtung) funktioniert das. Ab dann ist schluss und die Grafik fängt an zu zittern - sie vergrössert sich 1x und verkleinert sich dann wieder um 1x. Es scheint so zu sein, als ob ich nicht richtig auf das Richtungereignis reagiere.
Verknüpfe ich das mit einem Tastaturereignis (Cursor rauf oder runter) klappt alles. Ist aber unschön. Kann mir jemand helfen, auf das Wheel-Richtungsereignis richtig zu reagieren ?
Gruss und Danke
Markus
wulfskin - Mo 21.04.03 22:10
Hallo!
Ich blick dein Quelltext net, ganz. Egal, ich versuch dir trotzdem zu helfen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| WM_MOUSEWHEEL: begin if HIWORD(wParam) then skalar := skalar - 0.05 else skalar := skalar + 0.05; form1.normierung; Result := 0; end; |
Und was geht das jetzt genau nict, oder klappt das?
Gruß wulfskin!
M. Raab - Mi 23.04.03 13:16
Hallo,
bei Deinem Vorschlag bekomme ich ne Meldung: Ausdruck muss BOOELAN sein. Das liegt am: HIWORD(wParam)
Ich habe den Text jetzt wie folgt geändert:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case (Msg) of WM_MOUSEWHEEL: begin if HIWORD(wPARAM)>0 then begin skalar:=skalar-0.05; <- Drehrichtung nach Vorne form1.normierung; result:=0; end else begin skalar:=skalar+0.05; <- Drehrichtung nach Unten form1.normierung; result:=0; end; end; WM_CREATE: |
Der Werst SKALAR ist nur ein Vergrösserungs-/Verkleinerungsfaktor. Mit der Funktion FORM1.NORMIERUNG normiere ich dann die Daten neu und zeichne sie neu. Wenn ich den Text so lasse, reagiert alles auf das Mausrad recht gut. Aber nur in eine Richtung: er verkleinert jetzt alles nur (d.h. SKALAR:=SKALAR-0.05). Wenn ich in den APIs lese, steht da was von 120 als Normwert und von positiver und negativer Abweichung - je nach Drehrichtung des Rades. Irgendwie klappt aber das Feststellen der Drehrichtung bei mir nicht.
Kannst DU helfen ?
Gruss
Markus
wulfskin - Mi 23.04.03 19:31
Hallo Herr Raab ;)!
Es lag nur an einem kleinen Fehler, nämlich der Typumwandlung. Du musst speziell angeben, dass es sich um ein SmallInt handelt, da es sonst keine negativen Werte gibt.
Hier ein Beispiel, was nun auch berücksichtig, wie "weit" gedreht wurde:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Delta: SmallInt; begin [...] WM_MOUSEWHEEL: begin Delta := HIWORD(wParam); if Delta > 0 then begin skalar:=skalar - 0.05 * Delta / WHEEL_DELTA; result:=0; end else begin skalar:=skalar + 0.05 * Delta / WHEEL_DELTA; form1.normierung; result:=0; end; end; |
Gruß wulfskin!
M. Raab - Do 24.04.03 11:21
Hallo
Vielen DANK - klappt jetzt super. :D
Kleine Ursache, große Wirkung.
Gruss
Markus
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!