Pascal/Turbo Pascal - manejo de pantallas

 
Vista:

manejo de pantallas

Publicado por LadyCMarian (3 intervenciones) el 25/06/2004 20:56:19
Hola, mi nombre es Mariel. Mi pregunta es sobre el manejo de pantallas (tipo DOS) en turbo pascal. Como se hace para guardar una pantalla (en un arreglo o algo asi??) para no volver a dibujar las ventanas y evitar las estelas que asi se generan??
Gracias a todos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:manejo de pantallas

Publicado por Morito (176 intervenciones) el 26/06/2004 04:43:50
No sé a lo que te refieres, perdón, pero si es por borrado de pantalla.
Sería:
Uses crt;
begin
Write('Presiona Enter para que se borre la pantalla');
REadln;
Clrscr;
Write('Lo ves?');
Readln;
end.

Perdón si no sé hacerlo en ASM.
SAludosp.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:manejo de pantallas

Publicado por M@rceloL (152 intervenciones) el 26/06/2004 05:16:36
Bueno, se puede acceder a la pantalla haciendo algo como esto;

type pos=record
car,att:byte;
end;
type linea=array[1..80] of pos;
type Pantalla=array[1..25] of linea;

var PantallaDOS:Pantalla absolute $B800:00;

Lo que hacemos es definir una variable con la misma forma que la represtentación interna de la pantalla y forzar a que la variable se aloje en la posición de memoria B800, (con "absolute"). Que es donde está alojada la "pantalla" de DOS de 80x25.

El valor car es el caracter, y el attr es el atributo de color.

Para acceder a la pantalla podemos usar la matriz. Cualquier cambio hecho en la pantalla ocurre también en la matriz, y viceversa.

OJO que me han dicho o he leído por ahí que puede aber problemas con Windows por el tema del uso compartido de memoria... pero lo he probado y anda.

Saludos y felices compiladas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:manejo de pantallas

Publicado por LadyCMarian (3 intervenciones) el 26/06/2004 21:54:39
<<Gracias M@rceloL por tu respuesta!!>>

Soy yo de nuevo...
Hablando de pantallas en pascal...lo que yo se es que existe un metodo que te permite "guardar" una pantalla (por ejemplo, una ventana sola) asignando a una variable la direccion de memoria de la pantalla(o algo asi). Asi, cuando yo necesito volver a imprimir esa pantalla, lo que hago es una asignacion directa de la variable, y no tengo que dibujar toda la pantalla de nuevo. Asi se evitan esos efectos ke se producen al dibujar los cuadros y ventanas por toda la pantalla.
Espero haber sido clara en mi prengunta...o sea, yo se que se puede hacer, pero no se como...
Alguien me puede ayudar???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:manejo de pantallas

Publicado por Robert PERU (1 intervención) el 02/07/2004 02:55:28
Hola, si se puede salvar pantallas en arreglos aunque ocupan mucho espacio, lo puedes hacer con punteros o nodos que graben y muestren segmentos de pantalla, y te permitan sobreponer una tras otra sin necesidad de Re-dibujar...
Saludos, a la sgte haber si te envio el codigo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:manejo de pantallas

Publicado por Roberto Garcia (128 intervenciones) el 03/07/2004 08:53:32
Lo que yo creo que tu quieres hacer se puede hacer pero solo me lo se en modo grafico.

Y se trata de asignar una parte de la pantalla (la ventana que quieras guardar) en un puntero, para por ejemplo, dibujar la ventana, guardar la apariencia original, escribir algo sobre ella y luego volver a colocar la original.

eso se logra con getimage y putimage, pero repito solo trabajando en modo grafico un ejemplo rapido

Program Prueba
uses crt, graph;

var
p:pointer {Puntero donde se guarda la imagen}
size:word; {Tamaño de la imagen}
{Bla, bla, bla}

begin
{Se inicializan los graficos}
...
{Fin de inicializacion}

Size:=imagesize(10,10,100,100); {Se obtiene el tamaño de la imagen}
getmem(p,size); {Se guarda memoria para la imagen}
getimage(10,10,100,100,p^); {Se guarda la imagen en p}
cleardevice; {se limpia la pantalla}
putimage(100,100,p^) {Se coloca la imagen en la posicion 100,100}

end.

Esto es solo para modo grafico y tiene sus incovenientes, como que no puedes gardar partes de la pantalla muy grandes, si quieres mas informacion usa el ejemplo de getimage que trae pascal, espero sea algo parecido a lo que tratas de hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:manejo de pantallas

Publicado por M@rceloL (152 intervenciones) el 05/07/2004 00:59:05
Bueno, puede que yo esté entendiendo mal tu pregunta, pero con el método que te dije se puede hacer justamente eso. Una vez que tenés la matriz, se puede guardar en cualquier lado, así mismo se puede cargarla en memoria, en vez de dibujar en pantalla, los caracteres "aparecen" como por arte de magia en la pantalla y no creo (unque no lo probé) que parpedeen.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar