[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
ERIC MILLER
> My question is this: In TP, the outtextxy is supposed to change the
> CP (current pointer) to the location given in x,y. When you execute a
> readln after a outtextxy or even and outtext, the program always
> starts at 0,0.. Is there a way to set the CP where the readln will
> recognize it?
Here's a demo of a procedure called ReadlnXY; it reads
a string in graphics mode using BGI support.
}
PROGRAM Graphics_Readln;
Uses
Crt, Graph;
PROCEDURE ReadlnXY(X, Y: Integer; VAR S: String);
VAR
Ch : Char; { key from keyboard }
Done : boolean; { our flag for quiting }
CurColor : word; { color to write text in }
OldX : Integer; { old x }
BEGIN
S := '';
CurColor := GetColor;
MoveTo(X, Y);
Done := False;
WHILE NOT Done DO
BEGIN
Ch := Readkey; { get a single key }
CASE Ch of
#0 : { extra key - two chars - let's ignore them }
Ch := Readkey;
#13 : { return key }
Done := true; { we got our string, let's go }
#32..#126: { ASCII 32 (space) through 126 (tilde) }
BEGIN
OutText(Ch);
S := Concat(S, Ch);
END;
#8 : IF Length(S) > 0 THEN
BEGIN
{ move back to last character }
OldX := GetX - TextHeight(S[Length(S)]);
MoveTo(OldX, GetY);
{ over write last character }
SetColor(0);
OutText(S[Length(S)]);
SetColor(CurColor);
MoveTo(OldX, GetY);
{ remove last character from the string }
Delete(S, Length(S), 1);
END;
END;
END;
END; { ReadlnXY }
VAR
GraphMode, GraphDriver: Integer;
Name, PathToDriver: String;
BEGIN
GraphDriver := VGA; { VGA }
GraphMode := VGAHi; { 640x480x16 }
PathToDriver := 'D:\BP\BGI'; { path to EGAVGA.BGI }
{ you can make this program work with EGA 640x350x16 -
it requires 640 wide and 16 colors to work for this
example, but ReadlnXY should work in any graphics mode }
InitGraph(GraphDriver, GraphMode, PathToDriver); { set graphics mode }
SetTextStyle(DefaultFont, HorizDir, 2);
SetColor(12);
OutTextXY(63, 63, 'Please enter your name: ');
SetColor(13);
ReadlnXY(63 ,95, Name);
CloseGraph;
Write('The name you entered was: ');
Writeln(Name);
END.
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]