回 帖 发 新 帖 刷新版面

主题:<继续罗嗦>文本模式下的背景色

在编译一个程序的时候, 如果你在全屏模式下编译, 窗口中的"Press any key"会闪烁, 如果在Windows的窗口模式下编译, "Press any key"就不会闪烁, 而且背景色也会改变为浅蓝色. 这是因为Windows的窗口模式改变了8-15号背景色的显示, 下面这个过程可以在全屏模式下模拟窗口模式的背景色:

procedure backcolor16; assembler;
  asm
    mov ax,$1003
    mov bx,$0000
    int $10;
  end;

然后就可以使全屏模式8-15号背景色的显示与窗口模式一样了.

这个过程可以用来显示256色边框, 利用那个直接显示的xpr过程:

xpr(10,10,chr(177),8,11);
把8和11改一改,就能组合出256色, chr(177)也可替换为176,178.

如果要恢复原来的样子, 请用下面的过程:
procedure backcolor8; assembler;
  asm
    mov ax,$1003
    mov bx,$0001
    int $10;
  end;

最后放一个样例程序:

program manycolors;
  var
    i,j,t:integer;
  procedure backcolor16; assembler;
    asm
      mov ax,$1003
      mov bx,$0000
      int $10;
    end;

  procedure xpr(x:byte; y:byte; st:string; col:byte; col2:byte);
    var
      colx,i,pt:integer;
    begin
      pt:=x shl 1+y shl 7+y shl 5;
      colx:=col+col2 shl 4;
      for i:=1 to ord(st[0]) do begin
        mem[$B800:pt]:=ord(st[i]);
        mem[$B800:pt+1]:=colx;
        inc(pt,2);
      end;
    end;
  begin
    backcolor16;
    for i:=0 to 79 do
      for j:=0 to 24 do begin
        t:=(i+j*80) mod 256;
        xpr(i,j,chr(177),t - t shr 4 shl 4, t shr 4);
      end;
  end.


回复列表 (共1个回复)

沙发

我同意,你确实很罗嗦,你这东西说出来,我们也用不着阿

我来回复

您尚未登录,请登录后再回复。点此登录或注册