Results 1 to 6 of 6

Thread: Simple unblocked readkey.

  1. #1

    Simple unblocked readkey.

    function getKey : Smallint;
    var ch : Byte;
    begin
    if keypressed then begin
    ch := Ord(readKey);
    if ch = 0 then getKey := 1000 + Ord(readKey)
    else getKey := ch;
    end else getKey := -1;
    End;

    Pretty smart. I found it online and it works great. Returns -1 if no key pressed. and 1000+scancode or ascii value. It really helps clean up the main program alot!
    Last edited by sixten; 16-05-2012 at 10:00 PM.

  2. #2
    Well, actually, it does return -1 on no key, scancode on keypress, and 1000+scancode on extended keys. Extended keys in crt report themselves as two keys, #0 followed by something else. Arrows are #0#70-something, so they would be returned as 1000+70(something), whereas 'A' would be returned simply as 65.

  3. #3
    On Windows you can also use GetAsyncKeyState to get the state of a specific key using one of VK_[xxx] virtual codes and even detect whether the key has been pressed or not previously.

  4. #4
    I would save readKey in a variable, because it is a complicated function? No reason to call it twice.

  5. #5
    as far as i remember, readkey removes the key pressed from the buffer. if you press a special key, it will put 2 chars in the buffer: a #0 char and another char. the sequencial call to readkey will catch them. but i think this will not allow to have multiple keypress, as the buffer is very short, only 16 chars (at least in dos/windows i think). unless you manage to extend that buffer.

  6. #6
    Quote Originally Posted by User137 View Post
    I would save readKey in a variable, because it is a complicated function? No reason to call it twice.
    It's called a second time to catch the scancode.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •