Page 1 of 1

Porque no funciona: WINDOW...MENU MainMenu()

Posted: Sat Jul 18, 2009 2:45 am
by csincuir
Hola a todos.
Esta es una simpre curiosidad:

Tengo dos programas:

MainSis.prg

Code: Select all | Expand

#include "Fivewin.ch"

Static oWnd

Function Main()

    DEFINE WINDOW oWnd TITLE "Sistema..." ;
        MENU MenuSistema( oWnd )
   
    ACTIVATE WINDOW oWnd MAXIMIZED ;
        VALID MsgNoYes( "Desea salir del Sistema","Confirme por favor" )

RETURN NIL


MenuSis.prg

Code: Select all | Expand

#include "Fivewin.ch"

Function MenuSistema( oWndSys )
Local oMenu

MENU oMenu
    MENUITEM "&Reportes" MESSAGE "Reportes del Sistema"  //ACTION
    MENU                                
        MENUITEM "Reporte &1" MESSAGE "Reporte No. 1 del Sistema" //ACTION
        SEPARATOR
        MENUITEM "&Salir" MESSAGE "Salir del Sistema" ACTION oWndSys:End()
    ENDMENU
ENDMENU

RETURN oMenu


Obtengo el siguiente error, cuando utilizo la opción "Salir" del Menu (Pero si cierro el sistema con Alt+F4, no hay ningun error y hace la pregunta respectiva).

Code: Select all | Expand

Error   Class: 'NIL' has no exported method: END

Llamado desde MYERROR( 84 ) en el modulo: ErrorSys.C
Llamado desde (b)ERRORSYS( 20 ) en el modulo: ErrorSys.C
Llamado desde END( 0 )
Llamado desde (b)MENUSISTEMA( 11 ) en el modulo: menu.C
Llamado desde TMENU:COMMAND( 0 ) en el modulo: MENU.C
Llamado desde TWINDOW:COMMAND( 0 ) en el modulo: WINDOW.C
Llamado desde TWINDOW:HANDLEEVENT( 0 )
Llamado desde WINRUN( 0 )
Llamado desde TWINDOW:ACTIVATE( 0 ) en el modulo: WINDOW.C
Llamado desde MAIN( 11 ) en el modulo: tsgsis.C


Ahora bien, si el prg MainSis.prg cambio la forma de instanciar el Menu de la siguiete forma:

Code: Select all | Expand

#include "Fivewin.ch"

Static oWnd

Function Main()
Local oMenu

    DEFINE WINDOW oWnd TITLE "TSG-Sistema"
   
    oMenu := MenuSistema( oWnd )
    oWnd:SetMenu( oMenu )
   
    ACTIVATE WINDOW oWnd MAXIMIZED ;
        VALID MsgNoYes( "Desea salir del Sistema","Confirme por favor" )

RETURN NIL


Si funciona correctamente salir del sistema con la opción Salir del Menu.

La pregunta es; Porqué no funciona correctamente el primer programa? si según la lógica esta correcto todo?

Si alguien puede probar los ejemplos y le sucede lo mismo, me gustaría me contara.

Saludos cordiales.

Carlos Sincuir

Re: Porque no funciona: WINDOW...MENU MainMenu()

Posted: Sat Jul 18, 2009 7:18 am
by Antonio Linares
Carlos,

Cuando se llama a MenuSistema( oWnd ) para construir el menu, oWnd es nil pues la ventana no se ha creado aún :-)

Code: Select all | Expand


    DEFINE WINDOW oWnd TITLE "Sistema..." ;
        MENU MenuSistema( oWnd )
 

Re: Porque no funciona: WINDOW...MENU MainMenu()

Posted: Sat Jul 18, 2009 10:12 am
by csincuir
Ahhhh!!, ya entendí, es cierto, no le ví de esa forma.
Gracias Antonio, por despejar esta duda.

Saludos cordiales.

Carlos.