9

我有一个 Squeak Morphic GUI 的图像,其中包含一些透明部分,因此不应接受任何鼠标事件等,但只是可见,但它需要在其他变形前可见。

这就是为什么我认为将出现的鼠标事件传播到底层变形会很有用。有谁知道我的问题的解决方案或解决它的其他建议。

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

_____________________________ <- basic morph

我希望这能说明我的问题。

4

2 回答 2

2

我能想到的最好的事情是以下几行(按照平滑度的递增顺序,以及工作可能性的递减顺序)

  1. 记录事件,将透明图像移开,然后重播事件。这似乎是一种低效且糟糕的方式。
  2. 以某种方式跟踪透明图像背后的焦点,并将事件传递给它。我不熟悉有问题的图书馆,所以我不知道是否可以这样做。如果您可以控制其他层,那么这很可能是要走的路。(您可以使用该 mouseDownEvent 直接调用他们的“发生鼠标事件”函数,尽管您仍然必须确定哪个会接收它)。
  3. 只需将其声明为在任何可用级别都不会将鼠标事件传递给它的东西。OSD 窗口倾向于这样做,我不确定如何。如果您可以这样做,我会建议您这样做……但是鉴于您要问这个问题,您可能不能。
于 2010-07-13T21:21:46.727 回答
2

默认情况下,变形鼠标事件在最顶层的变形中处理。但是,父变形能够#mouseDown使用#mouseDownPriority.

您的透明图像会获得所有点击,因为它是最高的。看看#rejectsEvent:。它只是结合#isLocked#visible拒绝事件。即使可见,您可能希望覆盖它以拒绝事件。

例如:

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