こんにちは、いくつかのフレームを含むフォームがあります。
一部のフレームでは、コンテンツをスクロールしたい (または少なくともマウスホイール イベントを処理したい)。
私は次のことを試しました:
フレームごとに OnMouseWheel イベント ハンドラを割り当てるだけ
親フォームの MouseWheel イベントをオーバーライドします。
procedure TFmReview.MouseWheelHandler(var Message: TMessage);
var Control: TControl;
begin
Control := ControlAtPos(ScreenToClient(SmallPointToPoint(TWMMouseWheel(Message).Pos)), False, True);
if Assigned(Control) and (Control <> ActiveControl) then
begin
ShowMessage(Control.Name);
Message.Result := Control.Perform(CM_MOUSEWHEEL, Message.WParam, Message.LParam);
if Message.Result = 0 then
Control.DefaultHandler(Message);
end else inherited MouseWheelHandler(Message);
end;
残念ながら、どちらも機能していないようです。
- ケース 1 では、イベントは決してトリガーされませんが、親フォームのマウス ホイール ハンドラーはトリガーされます。
- ケース 2 では、フォーカスを受け取るコントロールは、マウスホイール イベントを送信したいフレームを保持するパネルです。
簡単に言えば、マウスホイールイベントをマウスカーソルが上にある一番上のコントロールに向けるにはどうすればよいですか(カーソルがどのフレーム/親/フォームなどに関係なく)?