Pascal/Turbo Pascal - repeat: Mouse; Teclado; until salir

 
Vista:

repeat: Mouse; Teclado; until salir

Publicado por ruben (8 intervenciones) el 26/11/2012 19:58:10
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 a la vez. 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.

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
program testKbdMouse;
 
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

repeat: Mouse; Teclado; until salir

Publicado por ramon (2158 intervenciones) el 26/11/2012 22:10:26
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
program testKbdMouse;
 
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,'    ');
 
 
  {Porque estos fallos al poner keypressed ya tomas el valor de la pulsación si pones begin vuelve a ejecutar la entrada}
  { con lo cual retardas asta otra pulsación}
 
		if keypressed then
	{	begin   primero si quieres una respuesta rápida del teclado nunca intercales un begin en esta posición}
 
			tec1 := readkey;
			gotoxy(10,2); write('tec1:',ord(tec1),'    ');
			if tec1 = #27 then
				salir := true
			else
                          if tec1 = #0 then   {aquí si la pulsación es 0 entonces toma el siguiente numero si pones}
{begin vuelves a tener que pulsar tecla}
 
	{		begin   tampoco en esta posición sobra el begin para una respuesta rápida}
				tec1 := readkey;    { aquí se repite con la misma tecla}
				gotoxy(10,3); write('tec1:',ord(tec1),'    ');
			{end
		end}
	until salir = true;
   cursoron;
	DoneMouse
  end;
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

repeat: Mouse; Teclado; until salir

Publicado por ruben (8 intervenciones) el 26/11/2012 22:16:05
Gracias Ramón, pero begin no tiene efecto sobre la ejecución del programa. Solo se usa para marcar bloques de código (seguro esto ya lo sabes), así que en el programa en cuestión no fuerza a ninguna segunda lectura ni nada raro en los keypressed/readkey. El problema pasa por otro lado.
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

repeat: Mouse; Teclado; until salir

Publicado por ramon (2158 intervenciones) el 26/11/2012 22:24:30
{Grabe error el tuyo begin marca una ejecución no un bloque todo lo que entre entre un begin
y un end se ejecutara sin mas por lo tanto si pones un begin detrás de keypressed lo que
este dentro se ejecutara otra vez lo siento compruébalo tu mismo para que veas}
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