[ Foro de Pascal ]

FREE PASCAL MODO GRAFICO

27-Feb-2011 01:44
Antonio Martin
8 Respuestas

Hola. Es la 1ª vez que entro en este foro. Lo digo porque no conozco el método, pero continuaré exponiendo lo que deseo saber:
  Después de aprender la programación en Turbo Pascal decidí pasarme a Free Pascal por entender que es más completo y por las dificultades de T/P en los nuevos S.O. de windows. Me instalé el compilador de free pascal 2.4.2 y creé el primer código fuente para modo gráfico (para probarlo).Se trata de un pequeño programa que inserte un pixels cada vez que se pulse una de las teclas de dirección, pero dicho programa no responde a las pulsaciones de tecla; ni en otros programas del modo gráfico tampoco responde. El código fuente:
program prueba;
uses    crt, graph;
var
       gd,gm,x,y : integer;
       tecla     : char;
begin
       gd := detect;
       Initgraph(gd,gm,'');

       x := getmaxx div 2;
       y := getmaxy div 2;

REPEAT
putpixel(x,y,14);
tecla := readkey;
case tecla of
'8' : y := y-1;
'2' : y := y+1;
'4' : x := x-1;
'6' : x := x+1
end
UNTIL (tecla='f') or (tecla = 'F');
CloseGraph
end.

En espera de sus respuestas y previamente agradecido.
Un Saludo.
Antonio.
 


28-Feb-2011 14:03
Antonio P.G.

Saludos, tocayo.


Me alegro de que alguien se meta en el foro, que ya hacía tiempo...

A ver, he estado probando tu código y he llegado a la conclusión de que el "readkey" no funciona en el modo gráfico, porque pintar, sí que pinta (pero sólo el primer pixel, o lo que es varias veces el mismo...). (Creo). Si mal no recuerdo, había otra instrucción... (yo me pasé al Free Pascal desde el Turbo Pascal tras haber estado mucho tiempo con esta último).

Hace varias semanas que no programo nada, pero me da que ese es el problema. Echo un vistazo por ahí y te comento.

Por cierto, un "truquillo" que quizás ya conozcas es, para teclear menos, si tienes muchas letras en el "until" como condición de salida, usar conjuntos:

"until tecla in ['f','F'];"


¡Hasta luego!


28-Feb-2011 14:11
Antonio P.G.

(5 minutos después...)

Vale, cambia la librería (o "unit") "crt" por "wincrt" si operas bajo Windows. A mí ya me funciona así.

Espero que te funcione.

¡Ciao!


01-Mar-2011 17:03
Antonio Martin

Hola.
Muy agradecido por interesarse por mi problema, pero sigue sin responder a las teclas (no responde al Readkey ni al Readln) y recuerdo que esto solo me ocurre en el modo gráfico.
Un saludo.
Antonio


01-Mar-2011 18:22
Javier Valsecchi

Ah mi me paso lo mismo cuando intente usar el modo gráfico, y la solución es muy simple (la encontré después de buscar bastante), efectivamente el USES crt no es para modo gráfico solo para texto, la solución consiste en usar el USES wincrt que es para gráficos. Espero que te ayude mi respuesta, cualquier duda avisa.


01-Mar-2011 18:31
Javier Valsecchi

proba con este código( funciona lo acabo de probar):

program dibujarPunto;

uses graph, wincrt;

var
  driver, modo: integer;
  tecla: char;
  x, y: integer;

begin
  driver := detect;
  initgraph(driver, modo, '');
  x := 512;  
  y := 384;
  repeat
    putpixel(x,y, 15);
    tecla := readkey;
    case tecla of
      '8': y := y-1;
      '4': x := x-1;
      '6': x := x+1;
      '2': y := y+1;
    end;
  until tecla = 'f';
  closegraph;
end.


01-Mar-2011 18:39
Antonio P.G.

Hola.

Yo utilizo un portátil, pero quizás tú escribas en un teclado "grande" separado de tu terminal, y estés utilizando el teclado numérico. En ese caso, intenta con los otros números. (Puede parecer una tontería esta sugerencia, pero a veces son cosas "mu tontas" las que nos producen estos problemas).

Por otro lado, con lo del "readln" no sé a qué te refieres, dado que éste no está presente en tu código, y aunque lo estuviese, si mal no recuerdo no funciona en el modo gráfico (sólo en la consola).

Eso es todo lo que se me ocurre de momento... ¿Utilizas Windows? (No me digas que es Vista, por favor... :-P).

¡Ciao!


01-Mar-2011 18:47
Antonio P.G.

Hola.

Eso es justo lo que hice yo (excepto por las coordenadas que asignas a las variables al comienzo del programa, porqeu yo dejé las de Antonio), y también me funcionó (por eso lo indico arriba).

A ver si sale... :S


01-Mar-2011 20:59
Antonio Martin

Hola.
Efectivamente, se trata de la UNIT WINCRT. Erroneamente usaba CRT.
Muy agradecido a todos. Estaré en este foro para lo que pueda ayudar.
Un saludo:
Antonio






(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.)