``````{
KIMBA DOUGHTY

> could someone tell me how to do a shadow Window.. you know the Type that
> has a Window then a shadow of what is under the Window in color 8 or dark
> gray... Either in Inline assembly or Straight Pascal...
}

Interface

Uses
Crt, Dos;

Procedure WriteXY(X, Y : Integer; S : String);
Function  GetCharXY(X, Y : Integer) : Char;
Procedure SHADE(PX, PY, QX, QY : Integer);
Procedure BOX(PX, PY, QX, QY : Integer);
Procedure SHADOWBOX(PX, PY, QX, QY : Integer; fg, bg : Byte);

Implementation

Procedure menubox(x1, y1, x2, y2 : Integer; fg, bg : Byte);
Var
count : Integer;
begin
TextColor(fg);
TextBackGround(bg);
Writexy(x1 + 1, y1, 'É');

For count := x1 + 2 to x2 - 2 do
Writexy(count, y1, 'Í');

Writexy(x2 - 1, y1, '»');
For count := y1 + 1 to y2 - 1 do
Writexy(x1 + 1, count, 'º');

Writexy(x1 + 1, y2, 'È');
For count := y1 + 1 to y2 - 1 do
Writexy(x2 - 1, count, 'º');

Writexy(x2 - 1, y2, '¼');
For count := x1 + 2 to x2 - 2 do
Writexy(count, y2, 'Í');
end;

Procedure WriteXY(X, Y : Integer; S : String);
Var
SX, SY : Integer ;
begin
SX := WhereX;
SY := WhereY;
GotoXY(X, Y);
Write(S);
GotoXY(SX, SY);
end;

Function GetCharXY(X, Y : Integer) : Char;
Var
Regs : Registers;
SX, SY : Integer;
begin
SX := WhereX;
SY := WhereY;
GotoXY(X, Y);
Regs.AH := \$08;
Regs.BH := \$00;
Intr(\$10, Regs);
GetCharXY := Char(Regs.AL);
GotoXY(SX, SY);
end;

Procedure SHADE(PX, PY, QX, QY : Integer);
Var
X, Y : Integer;
begin
TextColor(8);
TextBackGround(black);
For Y := PY to QY Do
For X := PX to QX Do
WriteXY(X, Y, GetCharXY(X, Y));
end;

Procedure BOX(PX, PY, QX, QY : Integer);
begin
Window(PX, PY, QX, QY);
ClrScr;
end;

Procedure SHADOWBOX(PX, PY, QX, QY: Integer; fg, bg : Byte);
begin
TextColor(fg);
TextBackGround(bg);
BOX(PX, PY, QX, QY);
Window(1, 1, 80, 25);
SHADE(PX + 2, QY + 1, QX + 2, QY + 1);
SHADE(QX + 2, PY + 1, QX + 2, QY + 1);
SHADE(QX + 1, PY + 1, QX + 1, QY + 1);
MENUBOX(PX, PY, QX, QY, fg, bg);
end;

end.

``````