こんにちは私は内部にいくつかのフレームを持つフォームを持っています。Delphi 7 - フォーム内の埋め込みフレームのMouseWheelイベントの処理
フレームの中には、コンテンツをスクロールしたい(または少なくともマウスホイールイベントを処理する)ものがあります。
私は次のことを試してみました:
単に親フォームのマウスホイールイベントをオーバーライド各フレーム
ためのOnMouseWheelイベントハンドラを割り当てる:
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では、フォーカスを受け取るコントロールは、マウスホイールイベントを送信するフレームを保持するパネルです。
簡単に言えば、どのようにマウスカーソルが上にある最も高いコントロール(マウスカーソルがどのフレーム/親/フォームなどに関係なく)にマウスホイールイベントを向けることができますか?現在、マウスカーソルである上TWinControl
にマウスホイールの取り扱いを延期する
を[これらのSOの答え]を見てみましょう[ 1]彼らはおそらく助けるでしょう。 [1]:http://stackoverflow.com/questions/2472743/what-is-the-best-method-for-implementing-mouse-wheel-activity-in-delphi-vcl-form –
可能な複製[マウスホイール入力をフォーカスの代わりにカーソルの下で制御する方法?](http://stackoverflow.com/questions/2251019/how-to-direct-the-mouse-wheel-input-to-control -under-cursor-of-focused-of-focused) – Kromster