Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
  #2  
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: 23
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
  #3  
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
  #4  
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
  #5  
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
  #6  
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: 23
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
  #7  
Antiguo 09-10-2004
nicolasdom nicolasdom is offline
Miembro
 
Registrado: ago 2004
Posts: 41
Poder: 0
nicolasdom Va por buen camino
Question

Jaja yo de nuevo... me he puesto a implementar las ideas que me han dado y en los dos casos me surgieron problemas.

Caso 1) Usando Application Events.

El tema es que no se de donde saco el mensaje WM_KEYDOWN. Es decir este codigo esta mal la comparacion del Msg = WM_KEYDOWN. Supongo que debe ser algo como msg.algo pero no me anduvo. (creo que con esto si me ayudan no va a haber problemas). El siguiente problema (una vez resulto esto) es sabes que letra apreto. Eso de donde lo saco? (les pongo el codigo)

Código:
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg = WM_KEYDOWN then
	ShowMessage('tecla presionada');
end;

Caso 2) Usando Lo de Foco que comento Taita. Tengo una aplicacion con un MDI. En el MainForm (fsMDIForm) tengo un menu (navbar) al estilo xp. Lo que quiero es que tambien se acceda al menu con las teclas (por compatibilidad de versiones anteriores). EJECUTO, no abro ningun hijo y sin embargo no me funca lo de las teclas. En si la pregunta es como le doy el foco al mainform si es que no lo tiene.

Muchas gracias.

Espero solucinar esto rapido... me esta demorando demasiado...

AAA por ultimo... como hacen para poner codigo delphi y les ponga colorcito? (aca en el foro!!! )
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 01:21:13.


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