Mathematica 8でこれが機能しない理由を誰か指摘できますか:
DynamicModule[{x = Pink},
Row[
{Style["Hello", x],
Mouseover[
x = Green; "World",
x = Blue; "World"]}]]
私が期待しているのは、「World」にマウスを合わせると「Hello」の色が変わることです。私が得ているのは、色が変わらないピンクの「Hello」です。
Mathematica 8でこれが機能しない理由を誰か指摘できますか:
DynamicModule[{x = Pink},
Row[
{Style["Hello", x],
Mouseover[
x = Green; "World",
x = Blue; "World"]}]]
私が期待しているのは、「World」にマウスを合わせると「Hello」の色が変わることです。私が得ているのは、色が変わらないピンクの「Hello」です。
私は公正であるために十分長く待ったと思います。これが私の提案です:
DynamicModule[{x = Pink},
Row[{
Dynamic@Style["Hello", If[MouseAnnotation[] === 1, x = Green; Blue, x]],
Annotation["World", 1, "Mouse"]
}]
]
結果の FullForm を見ると、各複合命令セットの最後の部分のみが含まれていることがわかります。どうやら Mouseover はその引数を評価し、結果のみを保存します。
とを使用EventHandler
して"MouseEntered"
みてください"MouseExited"
:
DynamicModule[{c = Pink}, Row[{
Style["Hello", FontColor -> Dynamic[c]],
EventHandler[
"World", {
"MouseEntered" :> (c = Blue),
"MouseExited" :> (c = Green)
}]}]]
Mouseover
最初に起動したときに内部のすべての式が評価されることを簡単に確認すると、次のようになります。
Mouseover[Print["One"]; 1, Print["Two"]; 2]
Mouseover
x の値を実際に変更する慣用的な方法は、を使用することMouseAnnotation
です。Mr. Wizard's answer は、これを達成する方法を説明しています。
別の方法として、次のようなことができます
DynamicModule[{col = Pink},
Row[{Style["Hello ", FontColor -> Dynamic[col]],
Dynamic@If[CurrentValue["MouseOver"],
col = Green; "World",
col = col /. Green -> Blue; "World"]}]
]