[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]


{
Here is an (TP 5.5) atom that will help you grab "extended"
keyboard scancodes.  I think the problem you're having has to
do with the fact that you can't trap hot keys inside ReadLn,
yes?  You need to build a set of routines that support
a-key-at-a-time input into a string, echoing the keystrokes
to the screen as you go.  This "atom" just handles keystrokes-
the string handling is probably _WAY_ too long to list here.
}

Program _;

Uses Crt;

Type KeyType = (Ascii,ExtendedKey,Escape);

Var
KtGlb : KeyType;
ChGlb : Char;

Procedure GetExtKey( Var Ch:Char;  Var Kt:KeyType; );
Begin
  Repeat
  Until KeyPressed;
  Kt := Ascii;
  Ch := ReadKey;
  If (Ch=#0) Then
    Begin
      Ch := ReadKey;
      If (Ord(Ch)=27) Then Kt := Escape Else Kt := ExtendedKey;
    End;
End;

Procedure Main
Begin
  Write('Press a key.');
  ChGlb := #0;
  KtGlb := Ascii;
  Repeat
    GotoXY(13,1);
    GetExtKey(ChGlb,KtGlb);
    GotoXY(1,2);
    ClrEol;
    GotoXY(1,2);
    Case KtGlb Of
      Ascii       : Write('Ascii,    ');
      ExtendedKey : Write('Extended, ');
      Escape      : Write('Escape,   ')
    End;
    Write('Scancode = ',Ord(Ch));
  Until (Kt=Escape);
  WriteLn;
  WriteLn;
End;

Begin
  ClrScr;
  Main;
End.

This should help you capture _any_ extended scan code from the keyboard.
PgUp, PgDn, Ctrl-PgUp, Alt-Shft-F5, etc...  Chapter Seventeen of "Turbo
Pascal 5.5, The Complete Reference" by O'Brien (Borland/Osborne/McGraw-
Hill ISBN 0-07-881501-0) covers the issue of buffered string input pretty
well.

And as for your next berrage of questions, "Turbo Pascal Advanced
Techniques" by Ohlsen & Stoker (Que Corp. ISBN 0-88022-432-0) covers
DOS windowing very nicely.  (Also many other goodies).

Hope it helped a little.
David Kandrat

[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]