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

{
>show some help Text or something, and then make it disappear
>without erasing the Text that the Window overlapped.  In other
>Words, there will be a screen full of Text, the Window would open
>up over some Text display whatever message, and disappear, leaving

The Text you see displayed on the screen can be captured to a Variable
and subsequently restored through direct screen reads/Writes.  Video
memory is located (on most systems) at $B800 For color and $B000 on
monochrome adapters.  Each screen location consists of two Bytes: 1) the
Foreground/background color of the location, and 2) the Character at the
location.

The following Program Writes a screen full of 'Text', captures this
screen to a Variable (VidScreen), Writes over top of the current screen,
then restores original screen stored in VidScreen.
}
Program OverLap;
Uses Crt;

Const
  VidSeg = $B800;     {..$B000 For monochrome}

Type
  VidArray = Array[1..2000] of Word;

Var
  VidScreen : VidArray;
  x : Integer;


Procedure SetScreenColor(back,Fore : Integer);
begin
  TextBackGround(back);
  TextColor(Fore);
end;


begin
  SetScreenColor(4,2);                   {.. green on red }
  ClrScr;
  For x := 1 to 25 do
    begin                                {..Write original screen }
    GotoXY(1,x);
    Write('Text Text Text Text Text Text Text Text Text Text Text '+
           'Text Text Text Text Text');
    end;
  readln;                                {..press enter to cont. }

  For x := 1 to 2000 do                  {..store current screen in }
    VidScreen[x] := MemW[VidSeg:x];      {  VidScreen Array }

  SetScreenColor(7,0);                   {..black on white }
  GotoXY(38,11);
  WriteLn('HELP');                       {..Write help Text, or }
  GotoXY(38,12);                         {  whatever... }
  WriteLn('HELP');
  GotoXY(38,13);
  WriteLn('HELP');
  readln;                                {..press enter to cont. }

  For x := 1 to 2000 do                  {..restore VidScreen Array }
    MemW[VidSeg:x] := VidScreen[x];
  readln;
end.

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