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

{
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...
}

Unit shadow;

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.


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