Keypress Help
J. Landman Gay
jacque at hyperactivesw.com
Mon Apr 18 15:38:11 EDT 2005
On 4/18/05 1:48 PM, Scott Rossi wrote:
> Howdy List:
>
> Still looking for options to reliably detect keypress events on Windows with
> Rev. Recap: keyUp messages are immediately sent regardless of whether a
> pressed key is released. Same happens with keyDown and rawKeyDown. Even
> the keysDown() function doesn't seem to help here since it apparently
> alternates between returning the pressed key/s and empty.
>
> I now have to go explain to a client why I was unable to get their demo
> working correctly on a test system. This is majorly irritating since key
> events work as expected on MacOS.
>
> How can one reliably tell on Windows when a key is pressed versus when it is
> released?
Are you sure you don't have your operating systems backwards? ;) In my
experience, it has always been Mac OS that doesn't generate accurate
keyUp messages. Windows has always worked for me. That is an OS
limitation, as Macs send keyup immediately after keydown, regardless of
the physical state of the key itself. Or at least, that's how it has
always been in the past.
At any rate, I wrote a work-around for it, which should work just as
well on Windows as it does on Macs. You'll have to alter the script to
suit your own needs, but basically I had to implement a checking loop
after a key was depressed. I used a rawKeyDown to start the actions I
needed to do, and added "checkKey whichKey,theBtn" to the rawKeyDown
handler. That started the loop. Then this handler managed the rest of it:
on checkKey whichKey,theBtn
-- see if "f" or "r" key has been released; Macs don't generate
-- accurate keyUp msgs so we need to use a loop check
put charToNum(whichKey) into theKey
if theKey is not in keysDown() then -- key is released
repeat for each line i in the pendingmessages
if i contains "checkKey" then cancel (item 1 of i)
end repeat
send "mouseUp" to btn theBtn
else
send "checkKey whichKey,theBtn" to me in 200 milliseconds
end if
end checkKey
In my case, I only needed to check for the keys "r" or "f", but you
could alter this to check for whatever keys you need, or all of them.
I didn't have any trouble with the keysdown() function returning
incorrectly. That may be because I allowed some time between checks, but
I don't know for sure.
--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode
mailing list