[ Foro de Pascal ]

Librerias WinCrt y Crt

28-Jun-2015 20:26
Invitado (Cypher)
2 Respuestas

hola, estoy desarrollando una aplicacion en el que primero entro en el modo grafico para luego salir de este y acceder al modo texto.

Para esto utilizo las librerias WinCrt y Crt al mismo tiempo para manipular el texto tanto en el modo grafico como el modo texto. El problema surge cuando intento hacer readkey; en el modo texto, pascal no me lo detecta sin embargo en el modo grafico funciona a la perfeccion.

Si elimino la libreria crt y me quedo con la WinCrt, tengo el problema de que no puedo cambiar el color de texto ni el fondo de la pantalla, cual seria la solucion?

aqui les dejo el programa:

 
program ATM_RKJU;
 
uses crt,wincrt,sysutils,graph;
 
const
n=3;
 
{-------------->>Registro Datos Cliente-------------------}
type
 
Tipo_Cuenta= record
Ncuenta:integer;
Tcuenta:string;
Nombre:String;
Direccion:string;
Tel:integer;
Saldo:real;
CI:integer;
end;
{-------------------<<Fin Registro Clientes---------------}
 
Vec= array[1..n] of tipo_cuenta;
 
 
{--------------VARIABLES-------------------------------}
var
 
MenuOP,key:char;
gd,gm:smallint;
cliente:vec;
numOP1:char;
 
 
 
{----------------------->>Proceso Menu Principal----------------}
 
procedure Menu(OP:char);
 
begin
 
textbackground(blue);
textcolor(white);
clrscr;
cursoroff;
gotoXY(2,1);
write('Fecha: ',datetostr(date));
gotoXY(70,1);
write('Hora: ',timetostr(time));
gotoXY(25,1);
write('Banco Mercantil - Cajero Automatico');
gotoXY(2,9);
write('1.Gestion de Claves');
gotoXY(2,15);
write('2.Consulta de saldo');
gotoXY(2,21);
write('3.Retiro de efectivo');
gotoXY(55,9);
write('4.Depositos');
gotoXY(55,15);
write('5.Consulta de movimientos');
gotoXY(55,21);
write('6.Salir del sistema');
 
 
 
               OP:=readkey;
               gotoxy(30,24);
               textcolor(yellow);
                                 case OP of
 
                                 '1':
                                 begin
                                 write('1.Gestion de Claves');
                                 end;
                                 '2':
                                 begin
                                 write('2.Consulta de saldo');
                                 end ;
                                 '3':
                                 begin
                                 write('3.Retiro de efectivo');
                                 end;
                                 '4':
                                 begin
                                 write('4.Depositos');
                                 end;
                                 '5':
                                 begin
                                 write('5.Consulta de movimientos');
                                 end;
                                 '6':
                                 begin
                                 write('6.Salir del sistema');
                                 halt();
                                 end;
                                 end;
                                 delay(500);
                                 clrscr;
 
end;
{---------------------------<<Fin Proceso Menu Principal---------------------------------}
 
 
 
 
 
 
 
 
 
 
 
 
 
{------------------------------->>PROGRAMA PRINCIPAL---------------------------}
 
 
begin
gd:=d8bit;
gm:=m800x600;
 
initgraph(gd,gm,'');
setbkcolor(0);
 
 
cleardevice;
settextstyle(6,0,3);
setcolor(white);
 
outtextxy(275,175,'BIENVENIDO');
outtextxy(220,250,'Banco Mercantil');
outtextxy(195,375,'CAJERO AUTOMATICO');
delay(4000);
 
cleardevice;
 
 
 
 
outtextxy(155,175,'Elija una opcion:');
outtextxy(145,250,'1.Cargar Informacion');
outtextxy(145,290,'2.Leer Archivo');
 
 
 
                numOP1:=readkey;
                setcolor(yellow);
                                case numOP1 of
 
                                      '1':
                                      begin
 
                                      outtextxy(175,400,'1.Cargar Informacion');
 
                                      end;
 
                                      '2':
                                      begin
                                      outtextxy(175,400,'2.Leer Archivo');
 
 
                                      end;
                                 end;
 
 
 
                  delay(400);
                  closegraph;
 
 
 
 
 
 
menu(menuOP);
 
 
 
 
readkey;
end.
{---------------------------------<<FIN PROGRAMA PRINCIPAL---------------}
 


 


28-Jun-2015 23:07
Nacho Cabanes (+30)

No deberías usar a la vez CRT y WinCRT, porque son bibliotecas que se solapan parcialmente, contienen funciones, procedimientos y variables duplicados.

Es una limitación de FreePascal. Si quieres usar gráficos, lo recomendable es usar WinCRT para poder acceder a funciones como ReadKey (que no funcionarán de otra forma), pero, como ya has descubierto, WinCRT permite menos posibilidades de manejo de consola de texto que CRT.

No hay "buenas soluciones", porque ambas tecnologías (CRT y GRAPH) están obsoletas, se tiende a programas "de ventanas". Algunas de las cosas que puedes hacer son:

- Usar WinCrt+Graph y asumir que no podrás cambiar colores en consola.

- Usar Crt en el programa principal y lanzar un programa secundario que muestre los gráficos.

- Usar Crt y aproximar las gráficas desde modo texto.

- Usar Turbo Pascal 7 con Crt+Graph y asumir que el programa sólo funcionará en equipos antiguos o mediante emuladores.

- Pasarte a entornos "de ventanas".


01-Jul-2015 21:07
Invitado (Cypher)

Muchas gracias por responder y las recomendaciones!! olvide agradecerte el mismo dia jeje






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)