Domingo 17 de Noviembre de 2024, 19:53
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
Ventanas Emergentes
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Ventanas Emergentes (Leído 2483 veces)
Enko
Miembro de PLATA
Mensajes: 1562
Nacionalidad:
Ventanas Emergentes
«
en:
Jueves 12 de Febrero de 2004, 14:08 »
0
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ó .
Tweet
_.B._
Miembro activo
Mensajes: 88
Re: Ventanas Emergentes
«
Respuesta #1 en:
Jueves 12 de Febrero de 2004, 21:02 »
0
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.
¡Olmo, dame peras!
www.BernardoLG.net
DriverOp
Miembro MUY activo
Mensajes: 201
Re: Ventanas Emergentes
«
Respuesta #2 en:
Viernes 13 de Febrero de 2004, 01:18 »
0
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;
begin
ClrScr; { 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._
Miembro activo
Mensajes: 88
Re: Ventanas Emergentes
«
Respuesta #3 en:
Viernes 13 de Febrero de 2004, 06:06 »
0
Sweet!!
Ya lo pruebo.
¡Olmo, dame peras!
www.BernardoLG.net
Enko
Miembro de PLATA
Mensajes: 1562
Nacionalidad:
Re: Ventanas Emergentes
«
Respuesta #4 en:
Viernes 13 de Febrero de 2004, 13:50 »
0
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 .
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.
Enko
Miembro de PLATA
Mensajes: 1562
Nacionalidad:
Re: Ventanas Emergentes
«
Respuesta #5 en:
Martes 2 de Marzo de 2004, 13:38 »
0
Aqui les dejo una unaidad capaz de hacer ventanas emergentes siguiendo tres procedimientos CrearPantalla,SalvarPantalla,RestaurarPantalla.
La unidad viene con un aplicacion demo con su codigo fuente para que quede más claro el uso de la unidad .
El mensaje contiene
1 archivo adjunto
. Debes
ingresar
o
registrarte
para poder verlo y descargarlo.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
Ventanas Emergentes