主题:<继续罗嗦>文本模式下的背景色
在编译一个程序的时候, 如果你在全屏模式下编译, 窗口中的"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.
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.