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 05-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Mira este ejemplo a ver si es que no has puesto que tecla es la que a provocar que el texto se muestre:
Código Delphi [-]
 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
 begin
  If key = #13 then
  ShowMessage('Pulsó enter');
 end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 06-10-2004 a las 07:53:03.
Responder Con Cita
  #2  
Antiguo 06-10-2004
nicolasdom nicolasdom is offline
Miembro
 
Registrado: ago 2004
Posts: 41
Poder: 0
nicolasdom Va por buen camino
No hay caso... el tema que en un formulario comun me anda. Pero en el MainForm no! Es un problema que ya me esta volviendo loco porque son tres lineas de codigo... lo tengo enfrente mio y no se que pasa! Help me help me...

Código:
 
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage('hola')
end;
Responder Con Cita
  #3  
Antiguo 06-10-2004
Avatar de taita
taita taita is offline
Miembro
 
Registrado: sep 2003
Ubicación: Murcia, San Pedro del Pinatar
Posts: 115
Poder: 21
taita Va por buen camino
Hola.
Has comprobado que el formulario tenga el foco?
A mi me ha pasado que al trabajar con MDI a veces al regresar al formPrincipal tras la ejecución del MDIhijo el foco se pierde y no se sabe a donde va a parar.
También puedes probar a crear un evento OnClick en el formPrincipal, con el mismo código, para ver si está funcionando correctamente.
Responder Con Cita
  #4  
Antiguo 06-10-2004
nicolasdom nicolasdom is offline
Miembro
 
Registrado: ago 2004
Posts: 41
Poder: 0
nicolasdom Va por buen camino
Hice lo que me manifestastes... puse en el MainForm en el evento Onclick el ShowMessage y anduvo bien. Pero sin embargo el OnkeyPress Sigue sin andar. Como puedo ver el tema del foco que me comentastes? AYUDA GENIOS... delphi.com.ar copate... soy de tu palo vamo vamo... argentina vamo vamo a ganar...
Responder Con Cita
  #5  
Antiguo 06-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El método que estás usando no te va a funcionar. A grandes rasgos sucede lo siguiente:

cuando se genera un evento del teclado el sistema manda el correspondiente mensaje directamente al control de tu aplicación que en esos momentos tenga el foco, incluso si el formulario que lo contiene tiene su propiedad KeyPreview en true. El control con el foco examina la propiedad KeyPreview del formulario padre y si es true entonces redirige el mensaje al formulario en donde termina el procesamiento del mensaje. En otras palabras, KeyPreview no es más que una simulación de que el formulario recibe primero el mensaje. La realidad es otra.

Si al momento de generarse el evento del teclado el foco está en un control de un formulario MDIChild entonces el mensaje nunca pasará de allí incluso si su propiedad KeyPreview es true ya que él- y no el formulario principal -es el formulario padre del control.

La única forma entonces de que el formulario principal reciba el mensaje es que, o bien el control con el foco está directamente contenido en el formulario principal y la propiedad KeyPreview de éste es true o bien el foco lo tiene en sí el formulario principal. Pero esto último en realidad no sucede porque estamos hablando de un formulario MDI y estos formularios manejan una ventana oculta (ClientWindow) que es la que se encarga de manejar los formularios MDICHild).

De hecho, cuando cierras todos los formularios MDIChild sucede lo que observa taita, el foco se queda en esta ventana oculta (para mi gusto un error pero no sé si de Delphi o del mismo Windows).

Así que, en el caso general, tu formulario principal no recibirá el mensaje.

Cómo solventar esto depende de la finalidad que tengas. Si, por ejemplo, lo que quieres es que "algo" pase cuando se oprima una tecla en particular, digamos Ctrl+R, lo más sencillo que puedes hacer es colocar una componente TActionList (de la paleta estándar), agregarle una Action y a ésta asignarle Ctrl+R como ShortCut y procesar el "algo" en su evento OnExecute.

Si lo que quieres es que el formulario principal maneje cualquier tecla (aunque esto sería un poco raro) entonces puedes optar por colocar una componente TApplicationEvents (de la paleta Additional) y en su evento OnMessage detectar el mensaje WM_CHAR, WM_KEYDOWN o WM_KEYUP según sea el caso.

// Saludos
Responder Con Cita
  #6  
Antiguo 06-10-2004
nicolasdom nicolasdom is offline
Miembro
 
Registrado: ago 2004
Posts: 41
Poder: 0
nicolasdom Va por buen camino
Muchisimas gracias por el tiempo que te has tomado para contestarme.

Les explico que lo que tengo es un MainForm con un menu del estilo NavBar de los de devExpress (si alguien los quiere ) y un par de barras mas. Como estoy desarrollando una aplicacion que estaba echa con aterioridad en cobol (DOS) la idea es dar la opcion mouse y click click click pero seguir con la compatibilidad de teclas para los que ya venian usando el sistema hace mucho tiempo (Requerimiento no funcional de Usabilidad) no tengan inconvenientes. Voy a probar lo de interceptar mensajes. Si alguien tiene otra solucion creo que es el momento... ya que una vez que lo hago no me gustaria volver a tocarl o

Un abrazo para todos los que componen este excelente foro.

Nicolas.
Responder Con Cita
  #7  
Antiguo 06-10-2004
Avatar de taita
taita taita is offline
Miembro
 
Registrado: sep 2003
Ubicación: Murcia, San Pedro del Pinatar
Posts: 115
Poder: 21
taita Va por buen camino
Hola de nuevo.
He estado haciendo algunas pruebas y como te omentabamos con anterioridad el foco se pierde al dejar el MDIhijo.
Lo que he probado y me ha funcionado ha sido a devolver el foco a la MDIPrincipal ANTES de cerrar el MDIhijo.
Es decir: Pasas el foco al MDIPrincipal y desde ahi cierras el MDIhijo y acto seguido devuelves el foco al MDIPrincipal en el mismo procedimiento.
Es un poco lioso lo que acabo de explicar.... pero funciona.
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 22:45:47.


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