Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Programar en consola, sin formularios (https://www.clubdelphi.com/foros/showthread.php?t=89516)

andrecuellar 05-12-2015 04:02:54

Programar en consola, sin formularios
 
Buenas, mi consulta es la siguiente, resulta que tengo que programar ciertas cosas, pero yo estaba acostumbrado a hacerlo con formularios y usando el diseñador, ahora mi profesor me está pidiendo que lo haga en consola, me pueden dar una ayudita? según yo era lo mismo que pascal pero cuando pongo:

uses crt y
ClrScr

me da errores ("cannot resolve unit name 'crt' at line 3 (3:13)". "Undeclarated identifier 'ClrScr' at line 7 (7:3)", y cuando ejecuto sale file not found crt.dcu en la sección de mensajes). y si los saco también me da errores en una ventana que dice "runtime error 105 at 0040A18A", cómo puedo resolverlo? o como se programa en consola? yo lo hacía con fomularios, labels y edit's, gracias de antemano!

esto es lo que quiero hacer, es un simple ejercicio de prueba, una vez entienda como se programa en consola lo demás es relleno y va por mi cuenta


SIN CRT NI CLSCR

Código Delphi [-]
program Project1;
uses
  SysUtils;
  var
  n:integer;
begin
  write ('Digite un número: ');
  readln(n);
  if (n mod 2=0) then
  write ('Es par')
  else
  write ('Es impar');
end.


CON CRT Y CLRSCR
Código Delphi [-]
program Project1;
uses
  SysUtils, crt;
  var
  n:integer;
begin
  ClrScr;
  write ('Digite un número: ');
  readln(n);
  if (n mod 2=0) then
  write ('Es par')
  else
  write ('Es impar');
end.

repito gracias de antemano, soy nuevo en esto, uso embarcadero rad studio 2010 y le doy en console application al abrir un nuevo proyecto y nada mas, sin forms ni nada

ecfisa 05-12-2015 12:16:24

Hola andrecuellar.

La unidad Crt es usada por Turbo Pascal en aplicaciones de 16 bits y por Free Pascal en linux/DOS.

Delphi 1 la soportaba y aunque no me animo a afirmarlo, creo que en Delphi 2 también era posible usarla. Pero ya no se contempló nativamente en las posteriores versiones de Delphi.

Fijate si encontras algún enlace útil aquí: Crt unit for Delphi 2010

Saludos :)

andrecuellar 05-12-2015 13:56:34

entonces como programo directamente en la consola sin que salgan esos errores? por favor si me podrías decir

AgustinOrtu 05-12-2015 16:06:44

Es que no son "errores", simplemente estas queriendo usar en tu codigo unidades que no existen, y luego llamadas a funciones que no existen (en tu version actual de Delphi por lo menos no existen)

andrecuellar 05-12-2015 17:04:29

y como podría hacer para programar en consola? o sea, sin formularios, gracias

AgustinOrtu 05-12-2015 17:33:25

El codigo que pusiste mas arriba es correcto sin Crt te da algun problema? Porque a mi me parece correcto

ecfisa 05-12-2015 23:01:00

Hola de nuevo.

Como te comenta Agustin, quitando la alusión a la unidad Crt (y a ClrScr), ese código funciona correctamente en modo consola.

Para lo único que estas incluyendo la unidad Crt es para usar la función ClrScr y, de necesitarla si o si, podes escribir la tuya:
Código Delphi [-]
program Project1; {$APPTYPE CONSOLE}

uses SysUtils, Windows;

procedure ClrScr();
var
  hnd   : THandle;
  scrnfo: CONSOLE_SCREEN_BUFFER_INFO;
  st    : string;
  co    : _COORD;
begin
  hnd  :=  GetStdHandle(STD_OUTPUT_HANDLE);
  GetConsoleScreenBufferInfo(hnd, scrnfo);
  st   := StringOfChar(' ', scrnfo.dwSize.X * scrnfo.dwSize.Y);
  Writeln(st);
  co.X := 0;
  co.Y := 0;
  SetConsoleCursorPosition (hnd, co);
end;

begin
  ClrScr();
  ...

Saludos :)

andrecuellar 05-12-2015 23:43:02

Cita:

Empezado por AgustinOrtu (Mensaje 500234)
El codigo que pusiste mas arriba es correcto sin Crt te da algun problema? Porque a mi me parece correcto

entonces hay un problema aquí, por que con el código que cité arriba no corre, sale una ventana que dice "runtime error 105 at 0040A18A", alguien me podría ayudar?

AgustinOrtu 05-12-2015 23:47:20

Eso es porque sacaste la directiva {$APPTYPE CONSOLE};

De hecho el Wizard cuando pones Console Application te lo genera el solo, solo que hay que dejarlo :)

El codigo completo seria asi

Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE} // no me elimines!!! :D

uses
  SysUtils;

var
  n: integer;

begin
  write('Digite un número: ');
  readln(n);
  if (n mod 2 = 0) then
    write('Es par')
  else
    write('Es impar');

end.

AgustinOrtu 05-12-2015 23:47:21

Edito: El mensaje me salio duplicado, aprovecho para editar este para agregar algunas lineas mas

Otra cosa que te recomiendo es que dejes una llamada a Readln al final de todo, porque cuando llega al fin del programa la consola se cierra y no vas a poder "ver los resultados"

Con un Readln al final el programa se quedara esperando hasta que alguien de enter para cerrarse (el clasico 'Presione ENTER para salir...')

andrecuellar 05-12-2015 23:52:14

Cita:

Empezado por AgustinOrtu (Mensaje 500241)
Edito: El mensaje me salio duplicado, aprovecho para editar este para agregar algunas lineas mas

Otra cosa que te recomiendo es que dejes una llamada a Readln al final de todo, porque cuando llega al fin del programa la consola se cierra y no vas a poder "ver los resultados"

Con un Readln al final el programa se quedara esperando hasta que alguien de enter para cerrarse (el clasico 'Presione ENTER para salir...')

Gracias! que estupidez que me mandé jajaja, ahora otra cosa que no me agrada es que se cierra apenas muestra el último mensaje, es posible hacer que la ventana quede sin cerrarse? o que al menos el resultado sea visible? jaja

ecfisa 06-12-2015 10:52:33

Cita:

Empezado por andrecuellar (Mensaje 500243)
Gracias! que estupidez que me mandé jajaja, ahora otra cosa que no me agrada es que se cierra apenas muestra el último mensaje, es posible hacer que la ventana quede sin cerrarse? o que al menos el resultado sea visible? jaja

Cita:

Empezado por AgustinOrtu (Mensaje 500241)
...
Otra cosa que te recomiendo es que dejes una llamada a Readln al final de todo, porque cuando llega al fin del programa la consola se cierra y no vas a poder "ver los resultados"

Con un Readln al final el programa se quedara esperando hasta que alguien de enter para cerrarse (el clasico 'Presione ENTER para salir...')

Saludos :)


La franja horaria es GMT +2. Ahora son las 08:32:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi