Page 1 of 1

Problema con el teclado

PostPosted: Wed Dec 28, 2011 3:35 pm
by jgayoso
Tengo el siguiente problema al recorrer el menú con el teclado la pantalla de la opción de prueba que corresponde a un dialogo, no recibe el foco.
En el menú queda Salir con AZUL y el boton CANCELAR no figura marcado con borde AZUL


En cambio al recorrerlo con el Mouse si pasa el foco al dialogo.
En el menú queda Salir sin AZUL y el boton CANCELAR figura marcado con borde AZUL

Adjunto aplicativo menu.prg

Se agradece cualquier ayuda.


#include "FiveLinux.ch"

Procedure Main(cOpcion0,cOpcion1)
Public oWnd_Principal,oMenu_Horizontal,oMenu_Vertical1,oMenu_Vertical2

DEFINE WINDOW oWnd_Principal TITLE hb_strtoutf8('PRUEBA DE MENU') SIZE 1024, 690
MENU oMenu_Horizontal
MENUITEM 'Horizontal 1'
MENU oMenu_Vertical1
MENUITEM 'Vertical 1' ACTION fAccion(1)
MENUITEM 'Vertical 2' ACTION fAccion(2)
ENDMENU

MENUITEM "Salir"
MENU oMenu_Vertical1
MENUITEM "Prueba" ACTION fAccion(3)
SEPARATOR
MENUITEM "Salir" ACTION fAccion(4)
ENDMENU
ENDMENU
oWnd_Principal:SetMenu(oMenu_Horizontal)
oWnd_Principal:Show()
msgalert('Inicio')
oMenu_Horizontal:SelItem( 1 )
ACTIVATE WINDOW oWnd_Principal
Return .T.

Function fAccion(nAccion)
do case
case nAccion=1
msgalert('Vertical 1')
case nAccion=2
msgalert('Vertical 2')
case nAccion=3
fDlg()
case nAccion=4
oWnd_Principal:End()
endcase
if nAccion<3
oMenu_Horizontal:SelItem( 1 )
else
oMenu_Horizontal:SelItem( 2 )
endif
Return .T.
Function fDlg()
DEFINE DIALOG oDlg
@2,5 say 'PRUEBA PRUEBA' of oDlg
@5,2 BUTTON oBtn1 PROMPT 'CANCELAR' ACTION oDlg:End()
@5,15 BUTTON oBtn2 PROMPT 'RETORNAR' ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER

Return .T.

Re: Problema con el teclado

PostPosted: Wed Dec 28, 2011 7:06 pm
by Antonio Linares
Jorge,

Pero es que los dos no pueden tener foco simultaneamente. Tienes que decidir cual de los dos quieres que lo tenga.

Lo estandard es que sea el diálogo

Re: Problema con el teclado

PostPosted: Thu Dec 29, 2011 2:25 pm
by jgayoso
El problema es que si yo avanzo por el teclado al dialogo no es lo mismo que si avanzo al dialogo por Mouse.

Ejecuta el aplicativo enviado y utiliza el teclado para desplazarte y luego has lo mismo con el Mouse, veras que con el Mouse se pasa el control al dialogo y el botón CANCELAR queda destacado, sin embargo al desplazarse con el teclado no.

No se si me explico bien, pero si compilas y ejecutas deberías poder replicar el problema.

Se agradece desde ya.

Jorge Gayoso

Antonio Linares wrote:Jorge,

Pero es que los dos no pueden tener foco simultaneamente. Tienes que decidir cual de los dos quieres que lo tenga.

Lo estandard es que sea el diálogo

Re: Problema con el teclado

PostPosted: Tue Jan 03, 2012 6:59 pm
by jgayoso
Ya lo solucione.

Después de seleccionar con el teclado en un menú item:

gdk_keyboard_ungrab()
gdk_pointer_ungrab()



HB_FUNC( GDK_KEYBOARD_UNGRAB )
{
gdk_keyboard_ungrab(0);
}

HB_FUNC( GDK_POINTER_UNGRAB )
{
gdk_pointer_ungrab(0);
}

Saludos cordiales,