1

I have inherited a Delphi 7 (VisualCLX) application to maintain and I want to filter some windows message like the mouse wheel (WM_MOUSEWHEEL) on the main form(TForm) of the application, is it possible on the Visual CLX ? How ?

I know that is possible on the VCL, but I'm looking for some solutions on the old Cross-Platform (CLX) ...

Note

I need to disable the mousewheel event because it keeps changing the active page(TPageControl) and this is very annoying in Delphi with Component Library for Cross-Platform (CLX), so any other workaround that solve the problem is welcome ...

aleroot
  • 71,077
  • 30
  • 176
  • 213

1 Answers1

4

Filtering input messages in CLX is not simple. There appears to be nothing like the VCL's OnMessage.

You can stop mouse wheel events being handled by CLX page controls with a simple interposer. Add this code to your main form, before the declaration of your main form class.

type
  TPageControl = class(QComCtrls.TPageControl)
  protected
    function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; 
      const MousePos: TPoint): Boolean; override;
  end;

And then in the implementation section of the unit, add this:

function TPageControl.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; 
  const MousePos: TPoint): Boolean;
begin
  Result := True;
end;

If you have a number of page controls on different forms then you should declare the interposer in a unit that can be shared by all the forms in your app. Or maybe even derive a proper grown-up sub-class.

David Heffernan
  • 601,492
  • 42
  • 1,072
  • 1,490