FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Porque no funciona: WINDOW...MENU MainMenu()
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Porque no funciona: WINDOW...MENU MainMenu()
Posted: Sat Jul 18, 2009 02:45 AM
Hola a todos.
Esta es una simpre curiosidad:

Tengo dos programas:

MainSis.prg
Code (fw): Select all Collapse
#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 (fw): Select all Collapse
#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 (fw): Select all Collapse
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 (fw): Select all Collapse
#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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Porque no funciona: WINDOW...MENU MainMenu()
Posted: Sat Jul 18, 2009 07:18 AM
Carlos,

Cuando se llama a MenuSistema( oWnd ) para construir el menu, oWnd es nil pues la ventana no se ha creado aún :-)
Code (fw): Select all Collapse
    DEFINE WINDOW oWnd TITLE "Sistema..." ;
        MENU MenuSistema( oWnd )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: Porque no funciona: WINDOW...MENU MainMenu()
Posted: Sat Jul 18, 2009 10:12 AM

Ahhhh!!, ya entendí, es cierto, no le ví de esa forma.
Gracias Antonio, por despejar esta duda.

Saludos cordiales.

Carlos.

Continue the discussion