Re: EventHandler problem
- To: mathgroup at smc.vnet.net
- Subject: [mg88966] Re: EventHandler problem
- From: m.r at inbox.ru
- Date: Thu, 22 May 2008 02:38:50 -0400 (EDT)
- References: <g03v5a$bp4$1@smc.vnet.net>
On May 10, 5:58 am, "J. McKenzie Alexander" <ja... at lse.ac.uk> wrote: > I'm trying to design a custom InputField that indicates whether or not = > the user has pressed Return to submit the changes. It's a simple > design: a red or green disk is drawn to the right of the InputField to = > indicate the state. > > Here's the definition of the disks: > > red = Graphics[{Green, AbsolutePointSize[12], Point[{0, = 0}]}, > ImageSize -> {20, Automatic}] > > green = Graphics[{Green, AbsolutePointSize[12], Point[{0= , 0}]}, > ImageSize -> {20, Automatic}] > > Here's my first attempt at creating the InputField: > > DynamicModule[{k = 1, changed = False}, > Row[{ > EventHandler[ > InputField[Dynamic[k], Number, FieldSize -> Tiny, > ContinuousAction -> True], > {"KeyDown" :> (changed = True), > "ReturnKeyDown" :> (changed = False) > }, > PassEventsDown -> True > ], > Dynamic[If[changed, red, green]] > }] > ] > > Everything works except setting the value of changed back to False > when the Return key is pressed. Mathematica fires the action for > *both* "KeyDown" and "ReturnKeyDown", and the "KeyDown" action is > invoked after the "ReturnKeyDown" action. (This happens regardless of > whether one uses {"KeyDown" :> (...), "ReturnKeyDown" :> (...) } or > {"ReturnKeyDown" :> (...) "KeyDown" :> (...)} in the argument to > EventHandler.) > > I've tried detecting the value of the key by using CurrentValue["EventK= ey"] but this doesn't seem to do anything... > > Any thoughts on how to solve this problem would be greatly appreciated! > > Cheers, > > Jason > > -- > Dr J. McKenzie Alexander > Department of Philosophy, Logic and Scientific Method > London School of Economics and Political Science > Houghton Street, London WC2A 2AE > The CurrentValue["EventKey"] behaviour is a bug. Here's a workaround: DynamicModule[{col = Green, x = Null, ret = ""}, EventHandler[ {InputField[Dynamic[x]], Style["\[FilledCircle]", FontColor -> Dynamic[col]]}, {"KeyDown" :> (If[! ret, col = Red]; ret = False), "ReturnKeyDown" :> (col = Green; ret = True)}, PassEventsDown -> True] ] Maxim Rytin m.r at inbox.ru