Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#1

Immer im Control unter dem Mauszeiger scrollen

  Alt 19. Nov 2010, 23:48
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.
Angehängte Dateien
Dateityp: 7z ScrollDemo.7z (152,6 KB, 17x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (20. Nov 2010 um 15:25 Uhr)
  Mit Zitat antworten Zitat