Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Por que OnKeyPreview del form no impacta en el de los componentes

Resulta que estoy haciendo una aplicación donde la telca '+' tiene un comportamiento especial, (incrementar un spinedit) pero no funciona correctamente.
Puse keypreview en true
con el foco en un TEdit, pulso '+'
En el FormKeyDown consulto por la tecla pulsada, si es un '+' le asigno 0 (para que no se procese en el TEdit) y sin embargo sale un + en el TEdit! a pesar que estoy diciendo Key = 0;

Qué podrá ser? hice una mini aplicación de ejemplo...
Gracias

Código Delphi [-]
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 286
  ClientWidth = 426
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  KeyPreview = True
  OldCreateOrder = False
  OnKeyDown = FormKeyDown
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 96
    Top = 72
    Width = 121
    Height = 21
    TabOrder = 0
    Text = 'Edit1'
  end
end

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  if (Key=107) or (Key=87) then begin // +
    Key := 0;
    end;
end;

Última edición por PabloZZZ fecha: 25-03-2008 a las 19:18:46.
Responder Con Cita
  #2  
Antiguo 25-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Tienes que poner tu código en el evento OnKeyDown del TEdit. No basta en este caso ponerlo en el Form a pesar de tener en OnKeyPreview a True.

El evento que gestiona las pulsaciones y contenido del TEdit es el evento OnKeyDown del propio TEdit.

__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 25-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Pero no puedo estar poniendo la condición en cada TEdit.. para eso puse la condición en el OnKeyDown del form! para que sea global.. teoricamente.. se procesa antes que todos los demás componentes.. no?
Responder Con Cita
  #4  
Antiguo 25-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Se procesa antes el evento OnKeyDown del Form que el del TEdit. Correcto.

Pero creo estar casi seguro que no causa ningún efecto poner Key := 0 en el evento del Form, sino que lo tienes que poner en el evento del TEdit para que si que cause efecto el Key := 0.

El evento OnKeyDown del Form sirve para 'detectar' pulsaciones del teclado en el Form antes que en los Controles individuales.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 25-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
puedes crear un componente derivado del TEdit, que tenga ese comportamiento y no tienes que programarlo en cada uno
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 25-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por PabloZZZ Ver Mensaje
Pero no puedo estar poniendo la condición en cada TEdit.. para eso puse la condición en el OnKeyDown del form! para que sea global.. teoricamente.. se procesa antes que todos los demás componentes.. no?
Cita:
Empezado por gluglu Ver Mensaje
Se procesa antes el evento OnKeyDown del Form que el del TEdit. Correcto.

Pero creo estar casi seguro que no causa ningún efecto poner Key := 0 en el evento del Form, sino que lo tienes que poner en el evento del TEdit para que si que cause efecto el Key := 0.

El evento OnKeyDown del Form sirve para 'detectar' pulsaciones del teclado en el Form antes que en los Controles individuales.
Hola, de entrada el código de la tecla '+' es 187 y tú estas buscando 107 y 87, ahora, gluglu esta en lo cierto, el Key := 0 no tiene el efecto que deseas en ese evento, para eso necesitas usar el evento OnKeyPress de esta forma:

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = '+' then Key := #0;
end;

Dices que no quieres hacer esto para cada uno de tus Edit's, pues porque crees que Delphi nos hace fácil la vida, genera ese evento en cualquier Edit y después asignalo a todos los demas Edit's. Así de fácil......

Salud OS

Edito: Por cierto, trata de colocar un titulo mas descriptivo ya que eso de "Por que" no dice nada.......
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 25-03-2008 a las 19:11:53.
Responder Con Cita
  #7  
Antiguo 25-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Dices que no quieres hacer esto para cada uno de tus Edit's, pues porque crees que Delphi nos hace fácil la vida, genera ese evento en cualquier Edit y después asignalo a todos los demas Edit's. Así de fácil......
Y si, no me queda otra... que raro.. tenia entendido que al asignar Key := 0 en el OnKeyPress del form tenia impacto en el de los componentes... voy a revisar código viejo... a ver como lo tenia implementado.

Cita:
Empezado por egostar Ver Mensaje
Edito: Por cierto, trata de colocar un titulo mas descriptivo ya que eso de "Por que" no dice nada.......
Ups! se me pasó! empecé a escribirlo... me puse a escribir el post y olvidé el titulo! ya está arreglado. Gracias!

Z
Responder Con Cita
  #8  
Antiguo 25-03-2008
Avatar de RK2
RK2 RK2 is offline
Miembro
 
Registrado: dic 2006
Posts: 18
Poder: 0
RK2 Va por buen camino
Disculpen...simulacion emergencia de hospital

Hola a todos... necesito realizar una simulacion de la emergencia de un hospital en delphi 7 con los siguientes requerimientos:
(1) Tiempo de llegada de los pacientes.
(2) Tiempo de servicio.
(3) Tiempo de espera para ser atendidos.
(4) Tiempo que dura el paciente siendo atendido..

Quisiera saber si delphi cuenta con funciones que me ayuden en esta tarea (funciones que manejen distribuciones estadisticas)....Gracias por la ayuda.!!
Responder Con Cita
  #9  
Antiguo 25-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por RK2 Ver Mensaje
Hola a todos... necesito realizar una simulacion de la emergencia de un hospital en delphi 7 con los siguientes requerimientos:
(1) Tiempo de llegada de los pacientes.
(2) Tiempo de servicio.
(3) Tiempo de espera para ser atendidos.
(4) Tiempo que dura el paciente siendo atendido..

Quisiera saber si delphi cuenta con funciones que me ayuden en esta tarea (funciones que manejen distribuciones estadisticas)....Gracias por la ayuda.!!
Hola RK2, a lo que te enfrentas, como debes saber es una simulacion mediante colas.
Al menos yo no conozco que venga, de fábrica, algo elaborado con dichas funcioones... pero muy seguramente encuentres bibliotecas especializadas. Algunas seran pagas, tal vez otras sean gratis, pero de fábrica solo encontrarás algunas funciones básicas. Lo demás deberás hacer a mano.

No te sabría decir un sitio que ofrezca dichas bibliotecas, pero para manejar colas Delphi ya cuenta con los objetos necesarios: TQueque, TStack, etc.. si das una leída a la ayuda de Delphi notarás que ya vienen los objetos que implementan estos tipos abstractos de datos, lo demás será darle "cuerpo".

Por cierto, tu duda está fuera de tema, no pertenece al hilo deberías haber iniciado un hilo exclusivo para esto, por favor respeta la guia de estilo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 25-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Disculpen, pero algo de razón tenia....

En vez de hacer Form.OnKeyDown, le puse la condición en Form.FormKeyPress y funcionó!

Saludos
Z
Responder Con Cita
  #11  
Antiguo 26-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por RK2 Ver Mensaje
Hola a todos... necesito realizar una simulacion de la emergencia de un hospital en delphi 7 con los siguientes requerimientos:
(1) Tiempo de llegada de los pacientes.
(2) Tiempo de servicio.
(3) Tiempo de espera para ser atendidos.
(4) Tiempo que dura el paciente siendo atendido..

Quisiera saber si delphi cuenta con funciones que me ayuden en esta tarea (funciones que manejen distribuciones estadisticas)....Gracias por la ayuda.!!
Por favor revisa la Guía de estilo.
Lo lógico para hacer una pregunta nueva que no tiene que ver con el hilo actual es crear un nuevo mensaje en el foro correspondiente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:09:31.


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