On Feb 23, 2007, at 15:18 UTC, GregO wrote: > So I'm trying to implement a magnify cursor on a canvas that changes > to a MagnifySmaller cursor when the user is holding down the option/ > alt key, but have not found an event that fires when that key is > pressed. How do I get it to change (short of expecting the user to > move the mouse to see the change). I realize that I could use a > timer, but I'm trying to bundle this all into one class if possible.
You've considered all your options. The user pressing or releasing a modifier key, by itself, is not an event. So the only way to detect it is to periodically check for it. But there is a way you can create a Timer in code, and bind it to yourself (er, your Canvas class) such that you get notification when it fires. It's not exactly ideal, but may be good enough for your purposes. The trick is that Timer is a subclass of ActionBinder, which defines an addActionNotificationReceiver method (as well as a corresponding "remove" method). So, if you make your class implement the actionNotificationReceiver interface, then you can do something like this: tim = New Timer // where tim is a property of this class tim.addActionNotificationReceiver self tim.Mode = Timer.ModeMultiple tim.Period = 500 tim.Enabled = true Now, whenever Tim the Timer fires, your PerformAction method (which is what the actionNotificationReceiver interface defines) is called. The reason I say this is not ideal is that if you have more than one timer (or other ActionBinder) to bind, you have no way of telling which one is calling your PerformAction method. It'd be better if PerformAction had a "source as ActionBinder" parameter, so if you have multiple sources of actions, you can take different action depending on which one's invoking the method. But, c'est la vie, no? It's still a pretty neat trick, and often useful. Cheers, - Joe -- Joe Strout -- [EMAIL PROTECTED] Verified Express, LLC "Making the Internet a Better Place" http://www.verex.com/ _______________________________________________ Unsubscribe or switch delivery mode: <http://www.realsoftware.com/support/listmanager/> Search the archives: <http://support.realsoftware.com/listarchives/lists.html>
