[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]
{
SJ> What is the best way to enter extended characters using readln? I
SJ> would really like to assign Ctrl-E to ASCII 130. I tried using ansi
SJ> and I could get it to work in dos but Pascal seems to override it.
SJ> Basically what I am tying to do is make it easy for the user to enter
SJ> foreign letters into a string. Any suggestions would be appreciated.
SJ> Stuart Johnston
To achieve this, you have to prog your own ReadLine-procedure, using
the READKEY and KEYPRESSED functions of TP.
You can't get READLN() to do the job for you. You have to do it your
own. :-)
Here is an example of what an Input-Line routine could look like:
It's only a small one. I also have a much more comfortable one, but it
isn't finished yet. :-)))
----------------------------------------------------------------------- }
uses CRT;
function InputLine(column, line, width, color : byte) : string;
{
Function to read one line of input from the keyboard.
}
var
i : byte;
key : char;
coln : byte; { column of cursor position }
entry : byte; { pointer into inputstring }
str : string; { input string }
begin
textattr := color; { set color of whole line }
gotoxy(column, line);
for i := column to (column + width - 1) do
write(#32);
coln := column;
entry := 1;
str[0] := #0; { empty string }
while (TRUE) do
begin
gotoxy(coln, line);
key := readkey;
case key of
#0 : begin { Trace Function-keys }
key := readkey;
end;
#8 : begin { BACKSPACE-key }
if (entry > 1) then
begin
coln := coln - 1;
gotoxy(coln, line);
write(#32);
entry := entry - 1;
end;
end;
#12 : begin { Ctrl-L : delete entire line }
gotoxy(column, line);
for i := column to (column + width - 1) do
write(#32);
coln := column;
entry := 1;
str[0] := #0; { empty string }
end;
#13 : begin { RETURN-key }
if (entry > 1) then { no RETURN with an empty line! }
begin
str[0] := char(entry - 1); { set string length }
InputLine := str;
exit;
end;
end;
#27 : begin { ESC-key : to abort the entry }
str := #255; { set a marker for "ESC-key has been pressed" }
InputLine := str;
exit;
end;
#32..#254 : begin
if (entry <= width) then { input field full? }
begin
write(key);
str[entry] := key;
entry := entry + 1;
coln := coln + 1;
end;
end;
end;
end;
end;
[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]