PDA

Ver la Versión Completa : OnKeyPress de un TEdit


luxus
16-02-2007, 16:40:22
Hola tengo una pequeña duda que no sé porque ahora no me funciona.
Vamos a ver. Tengo un TEdit y en el evento OnKeyPress tengo el siguiente código fuente:
procedure TFAnadir.Edit2KeyPress(Sender: TObject; var Key: Char);
var
uni,precio,sub: real;
begin
if (key=#13) then
begin
showmessage('key press');
uni:=StrToFloat(FAnadir.Edit2.Text);
precio:=StrToFloat(FAnadir.Edit3.Text);
sub:=uni*precio;
FAnadir.Edit5.Text:=FloatToStr(sub);
end;
end;

Cuando ejecuto la aplicación al introducir el nº de unidades y luego pulsar ENTER no sale nada.Es más, ni siquiera entra
en el bucle con lo que no me muestra el mensaje ('key press') que he puesto como verificación.
La verdad es que no sé donde está el error. A ver si con vuestra ayuda lo resuelvo.
Gracias

Editado por jhonny para colocar etiquetas Delphi

Onti
16-02-2007, 16:54:15
para ver que esta pasando en esta sección de tu código utiliza un "breakpoint" en la sentencia que preguntas si Key=#13 y de ahi ir verificando lo que sucede

Los breakpoints logran que el compilador se detenga en un lugar especifico de tu código y te permiten evaluar las variables y comportamiento de tu programa , para utilizarlos basta con presionar F5 sobre la linea de código deseada

jhonny
16-02-2007, 16:54:50
Cambia:

if (key=#13) then

por

if ord(key)=13 then


Espero te sirva de algo ;)

gluglu
16-02-2007, 16:54:54
Comprueba que el Form no tenga activada la propiedad 'KeyPreview'. Si es así, y el Form tiene algo en el evento 'OnKeyPress', te entrará siempre en el evento del Form y no del Edit en concreto.

Edito : Caramba !! Tres respuestas a la vez !

jhonny
16-02-2007, 17:00:15
Edito : Caramba !! Tres respuestas a la vez !

Lo mejor es que cada una aporta lo propio:D

ContraVeneno
16-02-2007, 20:25:44
if Key=VK_RETURN then begin

luisgutierrezb
16-02-2007, 20:41:25
no quitarias el evento por error? se quedo el codigo del procedimiento pero igual lo quitaste sin querer para que lo mande llamar

jhonny
16-02-2007, 20:48:04
no quitarias el evento por error?

Una vez me sucedio eso porque usaba Delphi 5 y resultaba que habia una especie de Bug que hacia que ciertos controles se desconectaran de ciertos eventos asi que opte por asignar los eventos por codigo.

luxus
22-02-2007, 00:45:47
Hola a todos,

Perdón por haber contestado con retraso.
He intentado todas vuestras sugerencias y sigo igual.Os comento:

1. Poniendo

if Key=VK_RETURN then begin

A la hora de compilar me da un error de tipos. En este evento Key es de tipo CHAR.

2. La propiedad del form "KEYPREVIEW" está a FALSE con lo que está bien...como siempre.

3. Haciendo el cambio:

if ord(key)=13

no me soluciona nada.

En todos estos casos NO me entra en el bucle y no reconoce la tecla INTRO.

¿Hay otras posibilidades?

Gracias por vuestra ayuda de antemano

vtdeleon
22-02-2007, 01:09:39
1. Poniendo

if Key=VK_RETURN then begin

A la hora de compilar me da un error de tipos. En este evento Key es de tipo CHAR.Debes usar otro evento, el Onkeyup u OnKeyDown.

Saludos

gluglu
22-02-2007, 01:15:28
Como se ha dicho arriba, intenta utilizar un 'BreakPoint' para ver si entra siquiera en el bucle o no. Si no entra, y todo está bien asignado durante tiempo de diseño, está claro que algo debe hacer tu código que tu mismo hayas programado para provocar que no entre en ese bucle. Suele pasar que uno se le olvida por donde dejó en su momento alguna cosa perdida ... :o

Te recomiendo es ese caso, como solución infalible, que asignes un evento OnEnter a tu 'Edit2', y que en dicho evento pongas precisamente :
procedure TFAnadir.Edit2Enter(Sender: TObject);
begin
Edit2.OnKeyPress := Edit2KeyPress;
end;


Opino que este debe de funcionar a la fuerza ! ;) Si es así, es que en alguna parte de tu código estás cambiado algo para que no entre de la manera que lo piensas.

Espero te ayude.

Edito y añado : O a lo mejor en tu código lo que estás precisamente haciendo en tiempo de ejecución es en algún lado poner a True el KeyPreview del Form. Yo lo hago en algunas ocasiones, poniéndolo y quitándolo segun me convenga.

nosferatu177
09-05-2007, 19:17:15
Hola tengo una pequeña duda que no sé porque ahora no me funciona.
Vamos a ver. Tengo un TEdit y en el evento OnKeyPress tengo el siguiente código fuente:
procedure TFAnadir.Edit2KeyPress(Sender: TObject; var Key: Char);
var
uni,precio,sub: real;
begin
if (key=#13) then
begin
showmessage('key press');
uni:=StrToFloat(FAnadir.Edit2.Text);
precio:=StrToFloat(FAnadir.Edit3.Text);
sub:=uni*precio;
FAnadir.Edit5.Text:=FloatToStr(sub);
end;
end;

Cuando ejecuto la aplicación al introducir el nº de unidades y luego pulsar ENTER no sale nada.Es más, ni siquiera entra
en el bucle con lo que no me muestra el mensaje ('key press') que he puesto como verificación.
La verdad es que no sé donde está el error. A ver si con vuestra ayuda lo resuelvo.
Gracias

Editado por jhonny para colocar etiquetas Delphi


Por si te ayuda en algo y si no para aquellos q les ocurra algo parecido :p

intentalo asi:
if key in [#13] then
begin
....
end;

Paoti
11-05-2007, 22:56:00
si funciona, lo he probado con el turbo delphi y esta funcionando.

no sé que pueda pasar.

¿tienes algo programado en los demás eventos de la caja de texto?


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) then
begin
ShowMessage('ahora que pasa');
Caption := 'Entro en el Enter';
Button1.Caption := 'Entro en el enter';
end;
end;

nosferatu177
12-05-2007, 23:14:03
si funciona, lo he probado con el turbo delphi y esta funcionando.

no sé que pueda pasar.

¿tienes algo programado en los demás eventos de la caja de texto?

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (key=#13) then begin ShowMessage('ahora que pasa'); Caption := 'Entro en el Enter'; Button1.Caption := 'Entro en el enter'; end; end;


si; es asi: (y me funciona correctamente en delphi 7)

if not (Key in ['0'..'9','.', #8, #13]) then
Key := #0; //solo acepte esas teclas
if key in ['.'] then //si la q se presiono es "punto"
begin
if (cadena<='0') or (cadena >='255') then
begin
mensaje('El número debe de estar entre....!');
edit1.Text:='';
edit.SetFocus;
end;
cadena:='';
end
else
begin
cadena:=cadena+key;
end;


Espero te funcione :D