Path: utzoo!attcan!uunet!snorkelwacker!bloom-beacon!eru!hagbard!sunic!kth.se!cyklop.nada.kth.se!krona From: krona@nada.kth.se (Kjell Krona) Newsgroups: comp.sys.mac.hypercard Subject: Re: Double Clicking on Button Message-ID: <1990Sep19.200709.4462@nada.kth.se> Date: 19 Sep 90 20:07:09 GMT Sender: krona@nada.kth.se (Kjell Krona) Organization: Royal Institute of Technology, Stockholm, Sweden Lines: 72 In <1562taylorj@yvax.byu.edu>, taylorj@yvax.byu.edu (Jim Taylor) writes: < There are a couple of ways to recognize double clicks. (stuff deleted ) < If you want to get fancy and do a good job, < try something like this < on mouseUp < put the ticks into start < repeat until the ticks-start >= 50 -- or whatever time you want to allow < if the mouseClick then < -- do doubleclick stuff here or set a flag < exit repeat < end if < end repeat < end mouseUp The script as it is cannot distinguish between single clicks and double clicks. By substituting "exit mouseUp" for "exit repeat" , the single click case can be handled after the repeat loop. Another case which might be nice to handle is "dragging"; perhaps to track the mouse cursor with a button. The following scripts distinguishes between dragging, single clicks, and double clicks. Two global variables, "theDragWait" & "theDoubleClickWait", are used for time values. These could be set on "opencard" or "openstack"; it might also be nice to let the user change the defaults on a "Preferences" card. A useful value for "theDragWait" is 5 - 10 ticks, for the "theDoubleClickWait" 10 - 20 ticks. on mouseDown global theDownTime -- Reset the mouse down timer put the ticks into theDownTime end mouseDown on mouseStillDown global theDragWait, theDownTime if (the ticks - theDownTime) > theDragWait then -- Do what you would like to do if dragging doDrag -- Then, reset the timer put empty into theDownTime end if end mouseStillDown on mouseUp global theDoubleClickWait, theDownTime if theDownTime<> empty then -- The "dragging" timer has not been reset => no dragging has occurred put the ticks into theUpTime -- This will wait until either the mouse is clicked again OR until -- _theDoubleClickWait _ time has elapsed, whatever comes first repeat until (the ticks - theUpTime > theDoubleClickWait) if the MouseClick then -- It was a double click doDoubleClick exit mouseUp end if end repeat -- It was a single click doSingleClick else -- We have been dragging; mouseUp should normally be ignored end if end mouseUp Good luck! Kjell Krona krona@nada.kth.se Dept. of Architecture/Dept. of Numerical Analysis and Computer Science Royal Institute of Technology S-100 44 Stockholm, Sweden