Pascal/Turbo Pascal - Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

 
Vista:

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 04/07/2013 23:40:58
Bueno resulta que quiero escribir un mensaje en pantalla y que lo muestre, pero el problema es que no puedo borrar. Puedo a lo sumo ir hacia el costado pero no borrar la letra que escribi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{	Cuando apreto la tecla supr o alguna de funcion , por cada espacio de letra me consume mas caracteres que una letra normal }
Program Mensaje;
Uses
	Crt;
Const
	N=10; { numero maximo de caracteres en el mensaje }
Type
	TMensaje= Array [1..N] Of Char;
	TClave  = Array [1..10]Of Integer;
	TCodigo = Record
							clave: TClave;   { clave }
							digitos: Integer;{ tamaño de la clave }
						End;
Var
	msjdeco: TMensaje;
  texto: String[N];
  tec: Char;
	i: Integer;
Begin
	i:= 1;
	Repeat
		tec:= Readkey; {Entrada de Caracteres}
		texto[i]:= tec;
		texto[0]:= Chr(i);
		Write(texto[i]);
		i := i + 1;
		If tec = #8 { Esta es la tecla de retroceso, pero para borrar la tecla es 7f y al f me lo toma con  una variable }
		Then Begin {Borrado de caracteres con tecla Retroceso, no puedo borrarlos.}
			i:=i-1;
			If i < 1 Then Begin
				i := 1;
				texto[i] := ' ';
				texto[0] := Chr(i);
				Write(' ')
			End
		End
	Until (i > N) Or (tec = #27); 
	For i:=1 To Length(texto) Do Begin
		msjdeco[i] := texto[i];
	End;
	Writeln('')
End.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por ramon (2158 intervenciones) el 05/07/2013 14:09:57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{Mira las correcciones realizadas a lo tullo}
 
Program Mensaje;
Uses
	Crt;
Const
	N=10; { numero maximo de caracteres en el mensaje }
Type
	TMensaje = Array [1..N] Of Char;
	TClave  = Array [1..10]Of Integer;
	TCodigo = Record
	clave: TClave;   { clave }
	digitos: Integer;{ tamaño de la clave }
  End;
Var
	msjdeco: TMensaje;
  texto: String[N];
  tec: Char;
	i: Integer;
   Begin
        clrscr;
	i := 1;
        gotoxy(2 + i,10);
	Repeat
		tec := Readkey; {Entrada de Caracteres}
                if tec <> #8 then
                begin
		texto[i] := tec;
		texto[0] := Chr(i);
		gotoxy(2 + i,10);Write(texto[i]);
		i := i + 1;
                end;
		If tec = #8 Then
                Begin
		   i := i - 1;
		   If i < 1 Then
		   i := 1;
		   texto[i] := ' ';
		   texto[0] := Chr(i);
		   gotoxy(2 + i,10);Write(' ')
		End;
	Until (i > N) Or (tec = #27);
        clrscr;
	For i := 1 To Length(texto) Do
        Begin
	  msjdeco[i] := texto[i];
	End;
	Writeln(msjdeco);
        readkey;
   End.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 06/07/2013 03:21:52
Gracias ramon, me sirvio.. Pero tengo unas dudas..
Primero:
Porque es necesario ir al medio de la pantalla? No puedo iniciar al principio de la pantalla?

Segundo:
Cuando apreto escape, deberia salir del programa pero lo que hace es sumar todas las letras escritas menos la primera mas un simbolo raro , y despues al apretar escape otra vez sale..
Un ejemplo: Pongo "hola" (apreto escape por primera vez ) y me aparece esto "hola" (un simbolo raro) y apreto escape por segunda vez y se me sale el programa y me aparece esto "holaola" (con el simbolo raro)


Tercero:
Cuando apreto enter la linea de cursor se me vuelve al principio de las letras y me lo toma como espacio. y una vez que escribo 10 caracteres, a la letra que escribi despues de apretar el enter me la pone adelante de la otra.. Un ejemplo: escribo "hola" (presiono enter y me hace un espacio) , vuelvo a escribir "hola" , presiono enter y se me pone asi : "holala hola" y deberia quedarme asi :
"hola
hola"
Espero que me hayas entendido.. Sino proba vos mismo.. Igual gracias por tu disposicion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por ramon (2158 intervenciones) el 06/07/2013 12:58:42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
{Primero puedes ponerlo donde quieras puesto que la posición la das en gotoxy() cambiando
 los valores cambias la posición en pantalla.
 De las otras respuestas son fallos del procedimiento tullo mira esto a ver si te ayuda a entenderlo}
 
 program mensaje;
 uses
    crt;
   const
      lon = 14;
  var
    tecla : char;
    x, y, cont : integer;
    salir : boolean;
    texto : string;
    mensa : string;
  function escribemensaje : string;
  begin
      cont := 1;
      salir := false;
      fillchar(texto,lon + 1,' ');
      texto[0] := chr(lon);
      x := 1;
      y := 3;
      gotoxy(20 + x,1);write('***** Entre Mensaje *****');
      gotoxy(x,y);
    repeat
       escribemensaje := ' ';
       tecla := readkey;
       if tecla in[#32..#126,#164,#165] then
       begin
          texto[cont] := tecla;
          texto[0] := chr(cont);
          gotoxy(x + cont,y);write(texto[cont]);
          cont := cont + 1;
          if cont > lon then
          salir := true;
       end;
       if tecla = #8 then
       begin
           cont := cont - 1;
           if cont < 1 then
           cont := 1;
           texto[cont] := ' ';
           texto[0] := chr(cont);
           gotoxy(x + cont,y);write(texto[cont]);
       end;
    until (salir = true) or (tecla = #13);
    if cont > 1 then
    begin
       escribemensaje := copy(texto,1,length(texto));
    end;
       clrscr;
   end;
 
   begin
      clrscr;
      writeln;
      mensa := escribemensaje;
      gotoxy(40,12);write(mensa); {Dejamos El Mensaje donde deseemos en
                                   este caso en posicion 40,12}
      readkey;
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 07/07/2013 23:09:16
Buenisimo ramon gracias che! Esto es para un trabajo que tengo que entregar para la universidad..
Igual tengo 3 dudas.
Primero, cuales son las teclas en ascii de estos codigos : 126,164,165 .. Y para que sirven..

Segundo, como hago para que cuando teclee enter me baje una linea y comienze a escribir en la linea de abajo.

Tercero , cuales son las teclas de movimiento en ascii ? Es para mover de lugar en las palabras.. Para no borrar todo , me muevo con las teclas de movimiento hacia cierta linea y borro cierta letra..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 08/07/2013 03:34:47
Hay alguna forma de evitar el goto.. Porque no me lo dejan usar para este programa :/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por ramon (2158 intervenciones) el 08/07/2013 23:22:08
{Primero los códigos 164,165 pertenecen a las letras [ñ y Ñ] respectivamente la 126 al [~].
Segundo si empleas gotoxy solo tienes que aumentar y cada vez que detecte la pulsación
del código 13 o sea #13.
Tercero las teclas so los números 72 75 77 80 ,
80 abajo
77 derecha
75 izquierda
72 arriba.

La forma de evitar el goto es con write pero no podrás manejar muy bien la presentación
del texto.}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 10/07/2013 21:07:51
Gracias ramon.. Agradezco tu ayuda .. Cualquier duda te consulto jaja! Una pregunta vos estudiaste en la universidad Computacion? o sos profesor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por isaias (8 intervenciones) el 10/07/2013 22:36:43
Ramon mi ultima duda y no molesto mas ..
Estuve intentando hacer que al apretar las teclas de movimiento (izquierda o derecha) se me mueva de lugar , pero no logro hacer eso.. No pude encontrar la correcion. Lo que me hace es cuando apreto la tecla izquierda, se me pone la K y despues escribo otra tecla y me reemplaza esa tecla por la K, pero no se mueve de lugar. Al igual con la derecha pero con la tecla M..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como puedo aplicar el codigo de backspace de la tabla Ascii en pascal?

Publicado por ramon (2158 intervenciones) el 13/07/2013 13:31:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
{A la primer pregunta mejor deja lo como esta solo te dire que soy español y me gusta ayudar
 en lo que pueda para todos.
 A la segunda a ver si este programa te ayuda.}
 
program muevecurs;
 uses
    crt;
  var
    texto : string;
    tecla : char;
    cont : integer;
    x, y : integer;
    valor : word;
 
  procedure entratexto;
  var
    pox, poy : integer;
  begin
     gotoxy(18,1);write('***** Editor De 255 Letras Finaliza Esc *****');
     cont := 1;
     x := 1;
     y := 2;
     gotoxy(x,y);
  repeat
       tecla := readkey;
       if tecla = #0 then
       valor := word(ord(readkey)) shl 8
     else
       valor := ord(tecla);
     if valor in[32..126,164,165] then
     begin
         texto[cont] := tecla;
         texto[0] := chr(cont);
         gotoxy(x, y);write(texto[cont]);
         cont := cont + 1;
         x := x + 1;
         if x > 79 then
         begin
            x := 1;
            y := y + 1;
         end;
         if cont > 255 then
         cont := 255;
     end;
     if valor = 8 then
     begin
        cont := cont - 1;
        if cont < 1 then
        cont := 1;
        x := x - 1;
        if (x < 1) and (y > 2) then
        begin
        x := 79;
        y := y - 1;
        end;
        if (x < 1) and (y <= 2) then
        x := 1;
         texto[cont] := ' ';
         texto[0] := chr(cont);
         gotoxy(x, y);write(texto[cont]);
     end;
     if valor = 19200 then {izquierda}
     begin
          cont := cont - 1;
          x := x - 1;
          gotoxy(x,y);
     end;
     if valor = 19712 then {derecha}
     begin
        cont := cont + 1;
        if cont > length(texto) then
        cont := length(texto);
        x := x + 1;
       if x > cont -(y * 79) then
        x := cont;
        gotoxy(x,y);
     end;
     if valor = 18432 then {Arriba}
     begin
        y := y - 1;
        gotoxy(x,y);
     end;
     if valor = 20480 then {Abajo}
     begin
        y := y + 1;
        gotoxy(x,y);
     end;
    if valor = 13 then
    begin
       texto[cont] := chr(13);
       texto[0] := chr(cont);
       cont := cont + 1;
       if cont > 255 then
       cont := 255;
       x := 1;
       y := y + 1;
       gotoxy(x,y);
    end;
  until valor = 27;
  end;
 
  begin
     clrscr;
     entratexto;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar