![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Mira este ejemplo a ver si es que no has puesto que tecla es la que a provocar que el texto se muestre:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
![]() Última edición por marcoszorrilla fecha: 06-10-2004 a las 07:53:03. |
#2
|
|||
|
|||
No hay caso... el tema que en un formulario comun me anda. Pero en el MainForm no!
![]() Código:
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char); begin ShowMessage('hola') end; |
#3
|
||||
|
||||
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. |
#4
|
|||
|
|||
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...
|
#5
|
||||
|
||||
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 |
#6
|
|||
|
|||
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 ![]() ![]() Un abrazo para todos los que componen este excelente foro. Nicolas. |
#7
|
||||
|
||||
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. |
![]() |
|
|
![]() |
|