Einige finden es bestimmt nervig, daß immer im Control mit dem Eingabefokus gescrollt wird und nicht dort, worüber sich der Mauszeiger befindet.
Hier ist also eine mögliche einfache Lösung dafür:
Delphi-Quellcode:
Procedure TForm1.MessageEvent(Var Msg: TMsg; Var Handled: Boolean);
Var H: HWND;
Begin
If ((Msg.message = WM_MOUSEWHEEL) or (Msg.message = WM_MOUSEHWHEEL))
and (Msg.wParam and MK_CONTROL = 0) Then Begin
H := WindowFromPoint(Msg.pt);
If (H = 0) or ((Msg.hwnd <> H) and (GetWindowThreadProcessId(H, nil) <> GetCurrentThreadId)) Then Begin
Msg.hwnd := 0;
Msg.message := WM_NULL;
Handled := True;
End Else Msg.hwnd := H;
End;
End;
Und dann natürlich noch
Application.OnMessage := MessageEvent;
.
Achtung: Wenn noch was Anderes dem Application.OnMessage zugewiesen ist/wird, dann muß man dieses mit beachten.
Ach ja, dieser Code leitet die Scrollereignisse immer nur im eigenem Programm weiter.
Es wird also nichts an fremde Programme übergeben. (stattdessen würde das Scrollergeignis verworfen)
Und das auch nur, wenn das eigene Programm den Eingabefokus besitzt.
(sonst empfängt es ja keines der nötigen Ereignisse)
[add]
Durch Drücken der [Strg/Ctrl]-Taste kann man die Umleitung nun auch vorübergehend deaktivieren.