Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   OnKeyPress de un TEdit (https://www.clubdelphi.com/foros/showthread.php?t=40441)

luxus 16-02-2007 16:40:22

OnKeyPress de un TEdit
 
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:
Código Delphi [-]
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:

Código Delphi [-]
if (key=#13) then

por

Código Delphi [-]
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

Cita:

Empezado por gluglu
Edito : Caramba !! Tres respuestas a la vez !

Lo mejor es que cada una aporta lo propio:D

ContraVeneno 16-02-2007 20:25:44

Código Delphi [-]
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

Cita:

Empezado por luisgutierrezb
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

Sigo igual
 
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

Cita:

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 :
Código Delphi [-]
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

a ver si te funciona asi..
 
Cita:

Empezado por luxus
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:
Código Delphi [-]
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?

Código Delphi [-]
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

Cita:

Empezado por Paoti
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 [-]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


La franja horaria es GMT +2. Ahora son las 21:14:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi