9

いくつかの透明な部分を含む Squeak Morphic GUI の画像があるため、マウスイベントなどを受け入れず、単に表示する必要がありますが、他のモーフの前に表示する必要があります。

そのため、出現するマウスイベントを下層のモーフに伝達すると便利だと思いました。私の問題の解決策やそれを解決するための別の提案を知っている人はいますか?

    V                         <- mouseDownEvent
_____________________________ <- transparent image (BorderedMorph)
  _____    _____     _____
_|     |___|    |___|     |__ <- buttons waiting for click and drop events

_____________________________ <- basic morph

それが私の問題を示していることを願っています。

4

2 に答える 2

2

デフォルトでは、Morphic マウス イベントは最上位のモーフで処理されます。ただし、親モーフは#mouseDownを使用して子にインターセプトでき#mouseDownPriorityます。

透明な画像は一番上にあるため、すべてのクリックを取得します。をご覧ください#rejectsEvent:。結合#isLocked#visibleてイベントを拒否するだけです。表示されていてもイベントを拒否するために、これをオーバーライドすることができます。

例えば:

MyMorph>>rejectsEvent: anEvent
  ^ true "Ignores all events."
于 2012-07-18T16:07:05.947 に答える
2

私が考えることができる最善のことは、次の行に沿ったものです(滑らかさの昇順、動作する可能性の降順に)

  1. イベントを記録し、透明な画像をタブで移動して、イベントを再生します。これは非効率的で貧弱な方法のようです。
  2. どういうわけか、透明な画像の背後にあるものを追跡し、イベントをそれに渡します。問題のライブラリに詳しくないので、そのようにすることが可能かどうかはわかりません。他のレイヤーを制御できる場合は、これが最も適した方法です。(その mouseDownEvent を使用して、「マウス イベントが発生しました」関数を直接呼び出すことができますが、どちらがそれを受け取るかを特定する必要があります)。
  3. 使用可能なレベルに関係なく、マウス イベントが渡されないものとして宣言するだけです。OSD ウィンドウはこれを行う傾向がありますが、方法はわかりません。あなたがこのようにできるなら、私はそれをお勧めします...しかし、あなたがこの質問をしていることを考えると、おそらくできないでしょう.
于 2010-07-13T21:21:46.727 に答える