Pascal/Turbo Pascal - leer teclado y mouse

   
Vista:

leer teclado y mouse

Publicado por ruben (8 intervenciones) el 26/11/2012 03:30:38
Quisiera saber porque no logro leer el teclado inmediatamente tras la pulsación de cualquier tecla. El teclado reacciona con un gran retardo. Ocurre que recién luego de varios segundos de tener pulsada una tecla el programa la captura con readkey.
En el programita estoy tratando de controlar el mouse y el teclado. Uso Free Pascal.
Le agregué un contador para ver los ciclos.
El mouse responde bien, pero el teclado parece dormido.
Gracias por tu atención.

Program Example5 ;

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
Uses mouse, crt;
 
function hayMouse:boolean;
Var
       Buttons : Byte ;
begin
	InitMouse ;
	Buttons := DetectMouse ;
	hayMouse := Buttons <> 0;
	DoneMouse
end;
 
 
Var
	Event : TMouseEvent ;
	r: real;
	salir: boolean;
	tec1, tec2: char;
begin
  if hayMouse() then
  begin
	clrscr;
	InitMouse;
	ShowMouse;
	cursoroff;
	r := 0;
	salir := false;
	Repeat
		if PollMouseEvent(event) then
			GetMouseEvent(Event);
		gotoxy(10,10); write(r:0:3); r := r + 0.001;
		gotoxy(10,12); write(event.x,':',event.y,'  ');
		gotoxy(10,14); write('btns:',event.buttons,'    ');
		gotoxy(10,16); write('actn:',event.action,'    ');
		if keypressed then
		begin
			tec1 := readkey;
			gotoxy(10,2); write('tec1:',ord(tec1),'    ');
			if tec1 = #27 then
				salir := true
			else if tec1 = #0 then
			begin
				tec2 := readkey;
				gotoxy(10,3); write('tec2:',ord(tec2),'    ');
			end
		end
	until salir;
   cursoron;
	DoneMouse
  end;
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

leer teclado y mouse

Publicado por ramon (2072 intervenciones) el 26/11/2012 18:12:19
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
{Mira como te loe corregido}
 
 Program Example5 ;
 
  Uses
    crt;
 
   Var
	r : real;
	salir : boolean;
	tec1, tec2 : char;
  begin
        clrscr;
	r := 0;
	salir := false;
	Repeat
	   if keypressed then
	    tec1 := readkey;
            if tec1 = #27 then
            salir := true
          else
             begin
                if tec1 = #0 then
                begin
                  tec1 := readkey;
                end;
                if tec2 <> tec1 then
                begin
                gotoxy(4,3);clreol;
                tec2 := tec1;
                end;
                gotoxy(4,3);write(ord(tec1));
             end;
	until salir = true;
  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

leer teclado y mouse

Publicado por ruben (8 intervenciones) el 26/11/2012 20:36:20
Gracias por tu tiempo Ramón, pero le has eliminado el manejo del mouse. Yo necesito leer lo que ocurre con el mouse y también con el teclado.
El mouse con las rutinas del mouse y el teclado con las rutinas de teclado, los dos a la vez pero de manera independiente.
El problema que no logro corregir es la velocidad de respuesta del teclado ya que luego de presionar por 10 segundos aprox. recién ahí el programa la lee con el readkey.
Dime Ramón, si es que probaste mi código (compilado y ejecutado), ¿como respondía el programa a la pulsación de las teclas?
Gracias.
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

leer teclado y mouse

Publicado por ramon (2072 intervenciones) el 26/11/2012 20:54:14
La respuesta era lenta puesto que :

1
2
3
4
5
6
7
8
9
10
11
12
if keypressed then
		begin
			tec1 := readkey;
			gotoxy(10,2); write('tec1:',ord(tec1),'    ');
			if tec1 = #27 then
				salir := true
			else if tec1 = #0 then
			begin
				tec2 := readkey;
				gotoxy(10,3); write('tec2:',ord(tec2),'    ');
			end
		end


esto es un freno para el programa

mira la diferencia de velocidad con este:
Repeat
if keypressed then
tec1 := readkey;
if tec1 = #27 then
salir := true
else
begin
if tec1 = #0 then
begin
tec1 := readkey;
end;
if tec2 <> tec1 then
begin
gotoxy(4,3);clreol;
tec2 := tec1;
end;
gotoxy(4,3);write(ord(tec1));
end;
until salir = true;

referente al mouse tu empleas la librería del mouse de free pascal pascal 7 no tiene esa librería
por he yo quite el mouse para poderte revisar el teclado .

el mouse lo puedes colocar como lo tenias e inserta ese código del teclado y comprueba resultados después me comentas y veremos que hacer.
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

leer teclado y mouse

Publicado por ruben (8 intervenciones) el 26/11/2012 21:59:15
Gracias Ramón, ambos códigos son equivalentes (no iguales en su funcionamiento) y el resultado tras experimentar con tu propuesta es el mismo que con el original.
Si le quito la parte del mouse, la respuesta del teclado es instantánea.
Yo había pensado que talvez la velocidad del ciclo (repeat /until) sería distinta poniendo o sacando la lectura del mouse en medio. Pero la verdad es que da lo mismo pues el contador que agregué para corroborar esto se actualiza siempre a la misma velocidad.
La relentización en la respuesta del teclado se genera cuando le inicializo el mouse, antes de entrar al ciclo.
Algo ha de hacer InitMouse que provoca esto en el teclado.
Claro que si no llamo a esta rutina, me quedo sin mouse.
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