{este programa crea ventanas de trabajo con color de fondo de borde, relleno y sombras de forma profesional usando la memoria de video para cambiar su atributo , asi como salvar la pantalla ya que asi como aparece la ventana desaparece}
{espero que te sirva}
program salvapantalla;
uses
crt;
type
tpos=record
car:char;
attr:byte;
end;
tlinea=array [1..80] of tpos;
tpant=array [1..25] of tlinea;
var
x,y:integer;
pantalla:tpant;
procedure salvar_pantalla(var panta:tpant);
var
p:tpant absolute $b800:$0000;
begin
panta:=p;
end;
procedure restaurar_pantalla(panta:tpant);
var x,y:byte;
begin
for y:=1 to 23 do
for x:=1 to 80 do
begin
gotoxy(x,y);write(panta[y,x].car);
end;
end;
procedure sombra(col1,fil1,col2,fil2:byte);
var
p:tpant absolute $b800:$0000;
x,y:byte;
begin
for x:=col1+1 to col2+1 do
begin
gotoxy(x,fil2+1);p[fil2+1,x].attr:=8;
end;
for y:=fil1+1 to fil2+1 do
begin
gotoxy(col2+1,y);p[y,col2+1].attr:=8;
end;
end;
procedure box(c1,f1,c2,f2,tipo,colorfondo,colorborde:byte);
const
simple=' { acsii de lineas simples } ';
doble=' { acsii de lineas dobles } ';
var
x,y:byte;
cuadro:string;
begin
textbackground(colorfondo);
textcolor(colorborde);
for x:=c1+1 to c2-1 do
for y:=f1+1 to f2-1 do
begin
gotoxy(x,y);write(' ');
end;
if tipo=1
then
begin
cuadro:=simple;
end
else
begin
cuadro:=doble;
end;
for x:=(c1+1) to (c2-1) do
begin
gotoxy(x,f1);write(cuadro[6]);
gotoxy(x,f2);write(cuadro[6]);
end;
for y:=(f1+1) to (f2-1) do
begin
gotoxy(c1,y);write(cuadro[1]);
gotoxy(c2,y);write(cuadro[1]);
end;
gotoxy(c1,f1);write(cuadro[2]);
gotoxy(c2,f1);write(cuadro[3]);
gotoxy(c1,f2);write(cuadro[4]);
gotoxy(c2,f2);write(cuadro[5]);
sombra(c1,f1,c2,f2);
end;
begin
clrscr;
for y:=1 to 25 do
for x:=1 to 80 do
begin
gotoxy(x,y);write('2');
end;
readln;
salvar_pantalla(pantalla);
box(5,5,60,10,2,1,15);
readln;
restaurar_pantalla(pantalla);
readln;
end.
Valora esta respuesta
0
Comentar
RE:sombras
Publicado por ranchal (1 intervención) el 21/02/2002 11:16:27
No se si has probado a utilizar un simbolo ASCII que es como una sombra. No se el número pero es lo que utiliza TP para esto. Si tienes la lista ASCII búscalo sino tendrás que ir probando. Para ello deja pulsado ALT+un numero hasta 256 y te saldrán simbolos al soltar. No se si te he sido de ayuda, pero lo que pascal usa es eso.