Aqui otra manera de intentar solucionar el problema de los menus configurables, esperando sus comentarios:
* FILE NAME: TUTOR.PRG
* BY: Rodolfo Silva C.
* EMAIL: sildata@cantv.net
* DATE: 12/25/6
* CUALQUIER MEJORA U OPTIMIZACION DE ESTE CODIGO SERA BIENVENIDA
#INCLUDE "fivewin.ch"
STATIC ownd
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
FUNCTION main
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
LOCAL obru
define brush obru style bricks
define window ownd TITLE "tutor01_00" brush obru MENU g_menu()
SET MESSAGE of ownd TO "tutorial" clock DATE KEYBOARD
activate window ownd maximized ON INIT dialogo()
RETURN nil
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
STATIC FUNCTION g_menu()
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
LOCAL amenu := { "Buscar", "Agregar", "Modificar", "Eliminar", "Listar",;
"Calculadora","Otros", "Salir" }
* esta matriz deberia venir formada como un parametro desde el programa
* llamante, lo cual implica que los elementos pueden ser estos los estandares
* u otros diferentes segun sea la necesidad.
LOCAL cx, owin, omenu, i
LOCAL nlgmnu := LEN( amenu ) // tama¤o del menu
*---------- aqui DETECTO Y traigo el objeto de la ventana activa en "OWIN"
* pues supongo que desconozco cual es la ventana que tiene el foco o activa
* asi de esta manera puedo aplicar el menu a cualquier ventana que yo
* seleccione previamente o lo solicite.
IF !( cx := GetProp( GetActiveWindow(), "WP" ) ) == 0
oWin := GetAllWin() [cx]
ELSE
oWin := Twindow()
oWin:hWnd := GetActiveWindow()
ENDIF
*---------- fin
MENU oMenu
FOR i = 1 TO nlgmnu
MENUITEM( aMENU[ i ] ) ACTION( menuacc(@oMenu), oMenu:refresh(), sysrefresh() )
NEXT
ENDMENU
RETURN oMenu
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
STATIC FUNCTION MENUACC( oMenu )
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
* Quizas Antonio o algun otro colega nos pueda indicar donde encontrar
* la documentacion o significado de : olastitem ; se lo que hace pero no se como
LOCAL opcion := oMenu:olastitem[ 2 ] // ojo devuelve el nombre de la opcion seleccionada
msginfo(oemtoansi("Usted Seleccion¢: ") + opcion )
* en la estructura inferior se podria habilitar el sonido "VOS" de la opcion
* hablada.
* tambien serviria para bloquear opciones segun nivel de acceso del usuario OJO
DO CASE
CASE UPPER( opcion ) = "SALIR"
* en palabras "SALIR" o segun sea la opcion seleccionada
oMenu:end()
CASE UPPER( opcion ) = "CALCULADORA"
winexec("calc")
ENDCASE
RETURN NIL
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
STATIC FUNCTION dialogo()
RETURN nil
* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
*+ EOF: TUTOR.PRG
*Formatted by: dANALYST Gold (Clipper 5.x) V5.0 on 12/25/6 at 9:46 AM.