Conclusion
=======
Estimados despues de torcerme la nuca varias veces, con este asunto, la solucion llego y claro esta vino de la mano de uno de ustedes.
debo reconocer que muchas veces uno se complica las cosas, y que luego de 10 año con fw aun mato pulgas a cañonazo.
luego de intentar con procname (al inicio pensaba que con esto lo solucionaba), luego de intentar los bGotFocus, y bLostFocus (estos funcionaron bien, con cambios, ya que implemente una bandera en ellos, una mezcla de la idea de manuel y kharina), la que funciono sin problemas fue la de viktor.
pego el codigo, para que noten que me estaba complicando la cosa, ya que el escenario era una ventana principal, esta no tenia una barra de menu como normalmente tiene nuestras aplicaciones, sino que tenia un dialogo al centro con unos botones, este dialogo tenia la clausula nowait y era esto lo que complicaba la cosa segun yo.
en este codigo he implementado dos teclas: f9 y f10 para llamar al modulo
oculto, para probar las dos implementaciones que funcionaron.
pero obviamente la idea del bKeyDown es la ganadora por excelencias.
agradesco a todos por su gratuita y valiosa ayuda
- Code: Select all Expand view RUN
...
FUNCTION Main()
LOCAL oFont
LOCAL oBrush1
/*procedimiento inicial pra configuracion de entorno*/
IF ! Main_Inicio()
RETURN
ENDIF
/*color del get con foco*/
SetGetColorFocus( CLR_SOFTYELLOW )
/*valida acceso*/
IF ! AccesoOk()
Main_Final()
RETURN
ENDIF
/*inicializa bandera*/
lEnMenu := TRUE
/*inicializa hotkey*/
SET KEY VK_F10 TO ventas2()
/*define brush*/
DEFINE BRUSH oBrush1 NAME "FONDO1"
DEFINE FONT oFont NAME GetDefaultFontName() SIZE 0, GetDefaultFontHeight()
/*ventana principal*/
DEFINE WINDOW oApp ;
FROM 1, 1 TO 600, 800 ;
TITLE "Sistema de Control de Inventario v1.02 - Importaciones Hernandez" ;
ICON GetIcon() ;
BRUSH oBrush1
/*barra de mensajes*/
DEFINE MSGBAR oMsgBar OF oApp PROMPT "KDSoft(c), Managua 2008"
DEFINE MSGITEM oItem1 OF oMsgBar PROMPT cStrTasa() SIZE 100 COLOR CLR_YELLOW, CLR_BLACK ACTION Tasa()
DEFINE MSGITEM oItem2 OF oMsgBar PROMPT "Usuario:" + cGUserName SIZE 150 COLOR CLR_HGREEN, CLR_BLACK
DEFINE MSGITEM oItem3 OF oMsgBar PROMPT "Tipo:" + cGUserType SIZE 100 COLOR CLR_HCYAN, CLR_BLACK
oMsgBar:KeybOn()
/*iniciliza codeblock para el inicio, foco, y desfoco de la ventana principal*/
oApp:bInit := {|| oApp:SetFont( oFont ), Main_Menu() }
oApp:bGotFocus := {|| lEnMenu := TRUE }
oApp:bLostFocus := {|| lEnMenu := FALSE }
oApp:bKeyDown := {|nKey| iif(nKey=VK_F9, ventas2(), NIL ) } //Winner!!!!
/*activa ventana*/
ACTIVATE WINDOW oApp MAXIMIZED VALID MsgNoYes( "Desea salir del sistema?", "KDSoft" )
/*desactiva hotkey*/
SET KEY VK_F10 TO
/*cierra tablas*/
Main_Final()
RETURN nil
PROCEDURE Main_Menu()
LOCAL oDlgMenu, oBrush2, oSay
LOCAL oB1, oB2, oB3, oB4, oB5, oB6, oB7, oB8
/*brush del menu*/
DEFINE BRUSH oBrush2 NAME "FONDO2"
/*define dialogo de menu*/
DEFINE DIALOG oDlgMenu NAME "DLG_MENU" OF oApp ICON GetIcon() BRUSH oBrush2
/*copyright*/
REDEFINE SAY oSay;
ID 401 OF oDlgMenu;
COLORS CLR_RED
/*logo*/
REDEFINE BITMAP;
ID 501 OF oDlgMenu;
NAME "MENU"
/*opciones*/
REDEFINE BUTTON oB1 ;
ID 101 OF oDlgMenu ;
PROMPT "Catalogo de Clientes" ;
ACTION Clientes()
REDEFINE BUTTON oB2 ;
ID 102 OF oDlgMenu ;
PROMPT "Catalogo de Productos" ;
ACTION Productos()
REDEFINE BUTTON oB3 ;
ID 103 OF oDlgMenu ;
PROMPT "Ingreso de Productos a Bodega" ;
ACTION Entradas()
REDEFINE BUTTON oB4 ;
ID 104 OF oDlgMenu ;
PROMPT "Registro de Venta Normal de Productos" ;
ACTION Ventas()
REDEFINE BUTTON oB5 ;
ID 105 OF oDlgMenu ;
PROMPT "Apertura/Cierre de Caja" ;
ACTION caja()
REDEFINE BUTTON oB6 ;
ID 106 OF oDlgMenu ;
PROMPT "Tablas de Soporte" ;
ACTION Menu_PopUpTablas( oB6 )
REDEFINE BUTTON oB7 ;
ID 107 OF oDlgMenu ;
PROMPT "Utilidades" ;
ACTION Menu_PopUpUtilidades( oB7 )
REDEFINE BUTTON oB8 ;
ID 108 OF oDlgMenu ;
PROMPT "Acerca de ..." ;
ACTION AcercaDe()
/*salida*/
REDEFINE BUTTON ;
ID 201 OF oDlgMenu ;
ACTION oApp:END()
oSay:lTransParent := TRUE
/*activa dialogo de menu*/
ACTIVATE DIALOG oDlgMenu CENTER NOWAIT
/*elimina brush*/
oBrush2:END()
/*correcion por que este dialogo es nowait*/
lEnMenu:=TRUE
RETURN
- Code: Select all Expand view RUN
...
PROCEDURE Ventas2()
LOCAL oCol
PRIVATE oDlg, oBrw
IF !lEnMenu
RETURN
ENDIF
/*Filtrar solo movimientos de salida*/
TIPO->( OrdSetFocus( "CODIGO" ), cmFilter( "TIPO->TIPO='-'" ) )
CLIE->( OrdSetFocus( "CODIGO" ) )
VEND->( OrdSetFocus( "CODIGO" ) )
PROD->( OrdSetFocus( "CODIGO" ) )
DETS->( OrdSetFocus( "NUMERO" ) )
SALI->( OrdSetFocus( "NUMERO" ), cmFilter( "SALI->TIPO='VL'" ) )
DBSELECT "SALI"
SET RELATION TO TIPO INTO TIPO, CODCLIE INTO CLIE, CODVEND INTO VEND