AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Mal wieder das lustige Thema MouseWheel
Thema durchsuchen
Ansicht
Themen-Optionen

Mal wieder das lustige Thema MouseWheel

Ein Thema von Codehunter · begonnen am 30. Nov 2011 · letzter Beitrag vom 30. Nov 2011
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mal wieder das lustige Thema MouseWheel

  Alt 30. Nov 2011, 08:54
Hallo!

Unter Windows ist es üblich, dass WM_MOUSEWHEEL nur dorthin gesendet wird, wo auch der aktuelle Eingabefocus liegt. Unter Umständen scrollt also ein Control bei gedrehtem Wheelrad selbst dann, wenn sich der Mauszeiger außerhalb des BoundsRect des betreffenden Controls befindet.

Einige Programme wie z.B. der Opera Browser verhalten sich anders. Sie scheinen WM_MOUSEWHEEL abzufangen und gezielt an das Control zu schicken, über dem sich der Mauszeiger befindet, unabhängig davon, ob das betreffende Control gerade den Eingabefokus hat oder nicht. Das Resultat ist eine viel komfortablere Bedienung (wie ich finde).

Jetzt versuche ich das in meiner Delphianwendung nachzubauen und komme irgendwie nicht richtig voran. Ich fange WM_MOUSEWHEEL wie folgt ab:
Delphi-Quellcode:
procedure TwndMain.WMMouseWheel(var Msg: TWMMouseWheel);
var
  P: TPoint;
  H: HWND;
begin
  P.X:= Msg.Pos.X;
  P.Y:= Msg.Pos.Y;
  H:= WindowFromPoint(P);
  if H > 0 then begin
    if H <> Windows.GetFocus then Windows.SetFocus(H);
    SendMessage(H, WM_MOUSEWHEEL, TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);
  end;
end;
Funktioniert aber nicht. WM_MOUSEWHEEL geht weiterhin nur an das Control mit dem Fokus, selbst wenn der Mauszeiger nicht darüber ist. Das Control über dem sich der Mauszeiger befindet erhält keine WM_MOUSEWHEEL Nachricht.

Ich hoffe, ihr könnt mir da ein bisschen helfen

Grüße
Cody
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Mal wieder das lustige Thema MouseWheel

  Alt 30. Nov 2011, 09:14
Vielleicht hilft das redirect-mouse-wheel-message-to-a-control-under-the-mouse weiter.
alex
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Mal wieder das lustige Thema MouseWheel

  Alt 30. Nov 2011, 12:06
Jo, das wirkt Ich musste zwar einige zickige Komponenten anpassen (z.B. VirtualStringTree, welcher unbedingt sein eigenes Wheel-Catching betreiben musste) aber ansonsten gehts.

Ich finde diese Art des Wheel-Handlings viel besser als den Windows-Standard, bei dem man immer erst das betreffende Control links anklicken muss. Vor ein paar Jahren gab es von Logitech mal einen Maustreiber den man auf dieses Verhalten einstellen konnte. Leider haben die dieses Feature inzwischen wieder ausgebaut.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Mal wieder das lustige Thema MouseWheel

  Alt 30. Nov 2011, 12:47
Ich habe das in meinem Projekt auch so umgesetzt (hatten wir schon mal analog in der DP) und gerade kürzlich gedacht, dass eine entsprechende TApplication-Option o.ä. sinnvoll wäre, mit der man dieses Verhalten leicht einstellen könnte (MouseWheelUnderCursor=True).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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