Ich war darauf gekommen, weil es bei eben nicht scrollt, wenn die Maus gerade auf einem TButton ist. Hab mich zugegeben noch etwas mißverständlich ausgedrückt bzw. aufgrund des möglichen Bugs etwas falsch interpretiert.
Grober Überblick (man verzeihe meine Verwendung von Klassen- statt Instanzennamen):
- TForm -> TPanel(1) -> TScrollbox -> TPanel(2) -> TPanel(3) -> TButton,TEdit
- Form.ActiveControl = Scrollbox
Ist die Maus nun über dem TButton, liefert ControlAtPos in DoMouseWheel (das habe ich in meiner Formoberklasse mit Deinem Code überschrieben) TPanel(1) zurück.
Ist die Maus über TPanel(3) oder über dem TEdit, dann ergibt ControlAtPos auch TPanel(3) und alles klappt.
Wechsel der Mausposition dabei ohne jegliches Klicken oder Focus-Verändern.
Bevor Du aber Zeit darauf verwendest - ich werde nochmal einen kleineren Testfall bauen; TPanel(2) wird bei mir zur Laufzeit dazwischengeschoben, nicht dass das noch Schuld ist.