1

WM_MOUSEWHEELDelphi 7 (VisualCLX) アプリケーションを継承して維持しています。アプリケーションのメイン フォーム( ) でマウス ホイール ( ) などの Windows メッセージをフィルタリングしたいのですTFormが、Visual CLX で可能ですか? どのように ?

VCLでそれが可能であることは知っていますが、古いクロスプラットフォーム(CLX)でいくつかのソリューションを探しています...

ノート

アクティブなページ()を変更し続けるため、マウスホイールイベントを無効にする必要があります。TPageControlこれは、クロスプラットフォーム用コンポーネントライブラリ(CLX)を使用するDelphiでは非常に面倒です。問題を解決する他の回避策は大歓迎です...

4

1 に答える 1

4

CLX での入力メッセージのフィルタリングは単純ではありません。VCL のようなものはないようOnMessageです。

シンプルなインターポーザーを使用して、CLX ページ コントロールによって処理されるマウス ホイール イベントを停止できます。メイン フォーム クラスの宣言の前に、このコードをメイン フォームに追加します。

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

次に、ユニットの実装セクションで、これを追加します。

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

さまざまなフォームに多数のページ コントロールがある場合は、アプリ内のすべてのフォームで共有できるユニットでインターポーザーを宣言する必要があります。または、適切な大人のサブクラスを派生させることさえできます。

于 2013-01-15T09:38:06.667 に答える