Programación General > Pascal

 Ventanas Emergentes

(1/2) > >>

Enko:
Hola , despues de varias dias sin resultado  de tratar de hacer un código que hiciera que guarde todo el contenido de lo que se ve en la pantalla ( en modo texto) no tengo más remedio que consultar en este foro.
    Necesitaria , por favor , que elguien me diera una pista de como se puede salvar el contenido de una pantalla de texto en una variable de cualquier tipo o cualquier otra cosa que lo permita . Asi de esta manera despues de llamar a Window(X1,Y1,X2,Y2)  se pueda recuperar el contenido de la pantalla que la ventana borró .

_.B._:
Saludos!.
Yo, en este momento, y con las herramientas q conozco, lo haría de la siguiente manera.
Haría mi programa imprimiendo TODO lo q haga y lea en pantalla, y AL MISMO TIEMPO, en un archivo de texto (valiendome del ASSIGN (Salida,'C:\TPASCAL\TEST.TXT'), y REWRITE (Salida)).
Así, después de un menú emergente, simplemente haría un CLRSCR, y leería todo el archivo de texto y lo imprimiría en pantalla.
Es lo q se me ocurre, mas no lo he hecho.
Ignoro si hay una manera más fácil EugenioEnko.

Suerte, y a programar!.

Bernardo L. :comp:

DriverOp:
Hola EugenioEnko:

  Te voy a enseñar un pequeño truco que te sacará del paso. Primero declara estas estructuras.


--- Código: Text --- uses Crt;type TPos=record     { Posición de la pantalla }      Car:char;     Attr:byte;    end;     TLinea=array [1..80] of TPos;   { Linea de la Pantalla }     TPant=array [1..25] of TLinea; { Pantalla Entera } var  Pant:TPant  absolute $b800:$0000;      { Pantalla }  BkPant: TPant   
Lo que he hecho aquí es declarar una estructura igual a una posición de la memoria de video en modo texto, la cual ocupa dos bytes, en el primer byte se almacena el caracter (un char) y en el segundo los atributos de color, inverso y parpadeo, luego declaro una linea de 80 posiciones de pantalla para luego repetirla 25 veces igualando así las 80 x 25 posiciones de la pantalla.
En la clausula var declaro una variable y fuerzo a que coincida con el inicio de la memoria de video en modo texto, y otra más para hacer el "back up" de la pantalla... luego solo resta escribir un código para probar esto:


--- Código: Text ---   BkTxtAttr: byte; beginClrScr;                                                { borro la pantalla }BkTxtAttr:=TextAttr;                            { me guardo los atributos de texto originales }Write('Este es el fondo de la pantalla');ReadKey; BkPant:=Pant;                                     { guardo la pantalla } Window(10,10,20,15);                          { creo una ventana }TextbackGround(4);ClrScr;                                                { pinto su fondo de rojo }Write('Esto es adentro de una ventana de texto');ReadKey; Window(1,1,80,25);                              { reestablezco el tamaño original de 80 x 25 }Pant:=BkPant;                                     { reestablezco el fondo }TextAttr:=BkTxtAttr;                            { reestablezco los atributos de texto } GotoXY(1,25);Write('Estoy afuera de la ventana otra vez.');ReadKey; end.  
Nada más, con esto debería ser suficiente para lo que quieres hacer. Ten en cuenta que en Turbo Pascal solo tienes 64Kb de memoria para variables de usuario y cada pantalla almacenada en memoria ocupa 2000 bytes (casi 2 kb) por lo que tal vez te conviene "cachear" en disco las pantallas capturadas.

Un saludo.

_.B._:
Sweet!! B)
Ya lo pruebo.

Enko:
DreiverOp
               : Es justo la manera que deseaba obtener (La de la memoria de visualizacion)  pero yo hacia que un puntero ( pointer ) apuntara ayi y la verdad que algo no me resultaba . Voy a probar de tu manera a ver que pasa. Tambien aqui te paso una funcion que identifica la posicion de la memoria de visualizacion segun el monitor que se utilize ( colr, b/n [es un poco raro que alguien tenga un monitor monocromo {b/n} pero nunca se sabe]).


--- Código: Text --- FUNCTION SEGVID:WORD; BEGIN  IF MEM[$0000:$0449]=7 THEN   SEGVID:=$B000  ELSE   SEGVID:=$B800; END;   
Espero que sea util de algo .
 B) Gracias por pasarme el codigo la verdad que me resulto de lo más util.

.B.  :
       De la manera que me pasaste habia pensado pero se complica en la parte de hacer recuadros en la pantalla y de no pasarce da la misma.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa