wct@po.CWRU.Edu (William C. Thompson) (06/22/91)
{ This little piece of code should suit just nicely to read
characters in from the graphics screen. }
procedure readgstr(x,y: word; maxlen: byte; var s:string);
uses crt,graph;
{ x,y are coordinates for leftmost character of the input string }
{ maxlen is the maximum length of the string s }
const
spacing=<number of pixels each character should be seperated by>;
foreground=<color of foreground writing>;
background=<color of background>;
var
state: byte;
ch: char;
function getoneof(s:string):char;
{ waits for user to input a character contained in string s }
begin
repeat
ch:=readkey
until pos(ch,s)>0; { ch is contained in s }
getoneof:=ch
end;
begin
<set appropriate text style here>
setcolor(foreground);
state:=1;
s:='';
for i:=1 to maxlen do s:=s+' ';
repeat
ch:=getoneof('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'+
'1234567890-_+=!@#$%^&*()~`''";:/?.,<>][{}\|'+#8+#13);
if (ch=#8) and (state>1) then begin
setcolor(background);
outtextxy(x+spacing*(state-1),y,s[state]);
s[state]:=' ';
state:=state-1;
setcolor(foreground)
end
else if (ch=#13) then state:=maxlen+2
else if state<maxlen+2 then begin
s[state]:=ch;
outtextxy(x+spacing*(state-1),y,s[state]);
state:=state+1
end
until state=maxlen+2;
{ now chop trailing spaces off of s }
while (length(s)>0) and (s[length(s)]=' ') do delete(s,length(s),1)
end;
Explanation: State is used to keep track of the status of your entry.
When state is in [1..maxlen], you are allowed to input more characters.
When state=maxlen+1, that indicates you can only delete characters.
When state=maxlen+2, you have completed entering characters.
I have used something very similar in the past, and it looks fine to
me. I know that there are some more sophisticated ways of doing some
of these things, but I tried to keep it simple.
I have similar routines (completed & tested) for sophisticated entering
of strings (insert and all) from crt mode if anyone is interested.
I apologize for the bizzare form of indentation, but I fell in
love with it and it's hard to go back...
--
William C. Thompson "And you run and you run to catch up with the sun, but
wct@po.cwru.edu it's sinking, racing around to come up behind you again."
Michelson 620D x2080 - Soon to be Rich and Famous Published Pascal God
A.K.A. Kaiser - Minister of Truth - Master of Time, Space, and Dimension, ^