Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
Joined: 31/12/2012 Location: New ZealandPosts: 9307
Posted: 11:34pm 02 Mar 2013
Copy link to clipboard
Print this post
Hi folks.
Trying to use the code:
Do:loop until inkey$<>""
to wait for a keypress, then act on it.
This works as far as waiting till you press a key, but then the result of inkey$ is always zero.
I added the line:
cls:? val(inkey$)
so that the screen would clear, and show me the value of the keypress, but it is always zero.
Can someone help me work out what I am doing wrong?
EDIT: Hang on - inkey$ is only NOT zero for the instant when I press a key, which allows the code to move to the next line, but then it will be zero again - I will try adding a line to copy the value of inkey$ to some other variable, then check that...
EDIT: Nope. Did not help. Can anyone prod me in the right direction?Edited by Grogster 2013-03-04Smoke makes things work. When the smoke gets out, it stops!
OA47
Guru
Joined: 11/04/2012 Location: AustraliaPosts: 926
Posted: 11:47pm 02 Mar 2013
Copy link to clipboard
Print this post
Grogster, you may have to assign a string to inkey$. ie K$= inkey$ and then test for the K$
All the best
Grogster
Admin Group
Joined: 31/12/2012 Location: New ZealandPosts: 9307
Posted: 11:54pm 02 Mar 2013
Copy link to clipboard
Print this post
Good point.
Tested, still not working.
Here is my experimental code:
wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? val(key$)
This does wait for a keypress, but the result is still zero no matter what key I press.
This is really confusing, as the fact that the loop continues once I press a key, means that InKey$(and it's copy key$) must now NOT be zero anymore, or the loop would not have looped, if you see what I mean, yet is still reports it as zero.Smoke makes things work. When the smoke gets out, it stops!
OA47
Guru
Joined: 11/04/2012 Location: AustraliaPosts: 926
Posted: 11:58pm 02 Mar 2013
Copy link to clipboard
Print this post
My memory isn't what it used to be, but I think Geoffg covered this sometime in the past. I will search the forum and see if I can come up with his post.
OA47
Guru
Joined: 11/04/2012 Location: AustraliaPosts: 926
Posted: 12:04am 03 Mar 2013
Copy link to clipboard
Print this post
Maybe this is the post I was thinking of:
http://www.thebackshed.com/forum/forum_posts.asp?TID=4720&KW =inkey%24
BobD
Guru
Joined: 07/12/2011 Location: AustraliaPosts: 935
Posted: 12:40am 03 Mar 2013
Copy link to clipboard
Print this post
Grogster
You are not thinking like a programmer. inkey$ clearly has a value else the loop would not terminate. By the way, it would be much tidier if you used a do while.... loop or a do ... loop until, however that is OT.
It is your conversion of inkey$ to Ucase$ and then to Val that is invalid somewhere along the way. Here is the definition of Val
Returns the numerical value of the ‘string$’. If 'string$' is an invalid
number the function will return zero.
What about the Ucase$, is there a purpose for it. Why don't you start basic and then make it more complicated. Just equate key$ to inkey$ and print that and when you are happy then add more functionality. You will then know when you break it.
Juri74
Senior Member
Joined: 06/02/2012 Location: ItalyPosts: 162
Posted: 12:41am 03 Mar 2013
Copy link to clipboard
Print this post
what version are you using?
in my maximite v4.3 this program works perfectly:
Do
A$=Inkey$
Loop Until A$<>""
Print A$
val(inkey$) return the VALUE of the ascii... if you press "3" val(a$) return 3 but if you press "f" val(a$) return 0
maybe you mean ASC(A$)
this is your original prog:
wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? val(key$)
try this:
wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? asc(key$)
try this:
A$="1024"
Print Val(A$)
Edited by Juri74 2013-03-04
Grogster
Admin Group
Joined: 31/12/2012 Location: New ZealandPosts: 9307
Posted: 12:31pm 03 Mar 2013
Copy link to clipboard
Print this post
Thanks guys.
@BobD - Yeah, I probably was not thinking that well. It was late at night, and I did not want to go to bed till I got that working. In the end, I gave up.
I wanted to use the F1-F12 keys, so was trying to get the value of the keypress, so I could confirm what is in the manual, page 53. When I put in a if key$=145 (for F1) kind of thing, it would not loop, so I was just trying to get a confirmation of number 145 as per the table on page 53 when I press [F1].
This I was not getting.
Thanks to Juri74 for the prod I needed. Using the ASC command gives me the number I want, so I should be able to go forward now.
I have removed any reference to Ucase$ too.Smoke makes things work. When the smoke gets out, it stops!
Grogster
Admin Group
Joined: 31/12/2012 Location: New ZealandPosts: 9307
Posted: 12:53pm 03 Mar 2013
Copy link to clipboard
Print this post
Still not having any luck.
Here is the code:
Do:
key=val(inkey$) 'Get decimal value of keypress
Loop until key<>0 'Wait for any key press
if key=145 then print "[F1] pressed.":end 'Key detected
print "Wrong key."
print key
end
This waits for a key, does nothing when I DO press [F1], then returns a negative number for any of the other function keys. Pressing [F2] results in key being printed as -158.
I'm getting a bit lost - any help appreciated.
Is there a better more standard and acknowledged way of handling the function keys in MMBASIC? Perhaps there is another method I should be using?
EDIT: I have been rereading this thread, the examples, and the manual. I think I see where I am going wrong, and it is the val statement again(as BobD tried to point out). Val can only be for a number, I think. So, you can't use it to obtain a decimal value of anything other then a number.
I will make some more changes and see what happens...Edited by Grogster 2013-03-04Smoke makes things work. When the smoke gets out, it stops!
Grogster
Admin Group
Joined: 31/12/2012 Location: New ZealandPosts: 9307
Posted: 01:13pm 03 Mar 2013
Copy link to clipboard
Print this post
AHHHHHHHHHH!!!!!!!!
I think I have it worked out with everyones help.
Do:
key$=inkey$ 'Save a keypress
Loop until key$<>"" 'Wait until there is a keypress
if asc(key$)=145 then print "[F1] pressed.":end
print "Wrong key."
print asc(key$)
This is detecting the correct keypress.
I will now expand on this...
Smoke makes things work. When the smoke gets out, it stops!