FoxPro/Visual FoxPro - BARRA DE MENU NO SE DESACTIVA

   
Vista:

BARRA DE MENU NO SE DESACTIVA

Publicado por Napoleon napoleonpolo@gmail.com (5 intervenciones) el 14/06/2015 09:05:08
Tengo un sistema que cuenta con un ejecutable (.EXE) formulario de nivel superior sin menú y varias aplicaciones (.APP)., el programa principal de estos apps es el menú, tel programa trabaja de la siguiente forma:
Se ejecuta el archivo .exe abre pantalla principal del programa, tiene varios botones de comando que llaman a cada app que se tiene, cuando se hace click en uno se desactivan todos los botones y se ejecuta el app, llamando al menú correspondiente, dicho menú tiene la opción salir del app y se desactiva el menú y se activan otra vez los botones de comando. Aquí se presento el primer problema, cuando se hace un menú que debe abrir en un formulario de nivel superior, se dice que la instrucción de correr el menú debe estar en el evento INIT de dicho formulario superior, con la instrucción "DO nombre_menu.mpr with this, .t."; pero como pueden ver yo no abro el menú cuando abro el formulario del ejecutable, y por lo siguiente me mandaba el error que ese menú solo se puede abrir en formularios de nivel superior. Soluciones esto creando un prg y lo puse como el programa principal de los app, para llamar al menú, el app tiene la siguiente instrucción: "DO nombre_menu.mpr WITH _SCREEN.ACTIVEFORM., .t.", asi pude abrir el menú, pero se presento otro problema, al escoger las diferentes opciones del menú, estas abren otros formulario, me salia el error que no encontraba la ruta de el formulario que se esta llamando. También pude solucionar esto, haciendo que en el menú no se llamara al formulario respectivo, sino que llamara a un prg y este prg tenia la instrucción de llamar el formulario, se soluciono.
El problema que me queda es que al ejecutar cualquier formulario del app, al abrirse este se debe des habilitar el menu, en un principio todo en el menú quedaba habilitado; parte de este problema pude solucionarlo colocando la propiedad "WINDOWSTYPE en 1 (MODAL) de los formularios de los app, digo que fue en parte porque me des habilita las opciones internas del menú principal, pero la barra del menú principal queda activa y si tengo una opción de la barra de menú principal que llama a un formulario, esta realiza el llamado y me sobrepone ese formulario sobre otro, o se puede llamar ese formulario mas de una vez y no no es correcto.
Espero haber sido claro en la explicación, espero que puedan dar una mano con este himpase , diciéndome como des habilito la barra principal del menú cuando escoja cualquier opción del menú.
Lo otro seria si hay otra forma de llamar los formularios directamente desde el menu sin que salga el error que encuentra la ruta del formulario.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

BARRA DE MENU NO SE DESACTIVA

Publicado por Fidel José (558 intervenciones) el 15/06/2015 16:14:24
Por el tema de la llamada a formularios y clases, te conviene establecer el set path al principio, donde pones todas las rutas en las que tienes .scx, vcx y prg.

Por ejemplo, en el main prg de cada app y exe que tengas:
lcRoot_scx = "C:\DESA\Forms"
lcRoot_vcx = "C:\DESA\Libs"
lcRoot_prg = "C:\DESA\Progs"
lcRoot_Datos = (se debe configurar de acuerdo a donde se encuentran los datos del usuario)

SET PATH TO '&lcRoot_prg' ADDITIVE
SET PATH TO '&lcRoot_scx' ADDITIVE
SET PATH TO '&lcRoot_vcx' ADDITIVE
SET PATH TO '&lcroot_Datos' ADDITIVE

O sin usar ADDITIVE
SET PATH TO &lcRoot_prg , &lcRoot_scx , &lcRoot_vcx , &lcRoot_Datos

Luego puedes abrir los prg que contienen las rutinas, supongamos que se llaman gralfunc.prg y set_Init.prg
SET PROCEDURE TO gralfunc.prg, Set_init.prg

También puedes llamar a formularios o librerías sin necesitar el path:
DO FORM MyfrmPpal

oo = newobject("Cust_func","TalClass.vcx","",Param1,param2,param3)

También puedes abrir una tabla (con la condición que no tengas nombres de tablas repetidos en distintas carpetas), sin necesidad de indicar el path en cada comando.
USE Mitabla IN 0 SHARED


Por el tema de la habilitación y deshabilitación de Menús, tienes que utilizar el comando SKIP FOR de cada elemento de menú. Si trabajas con el diseñador de menú, usa el cuadro Skip FOR.
Lo más sencillo es lo siguiente:
Al inicio de la aplicación puedes crear un array con tantos elementos como elementos de menú tengas. Lo puedes hacer con un array de 2 columnas, para poner en la primera a qué se refiere y en la segunda el estado.

Supongamos que tenemos 10 elementos de menú. En el main de la aplicación, antes de READ EVENTS
ADDPROPERTY(_screen,"aMenu[10,2]",.f.)
_screen.amenu[1,1]="Ventas"
_screen.amenu[2,1]="Compras"
_screen.amenu[3,1]="Contabilidad"
etc

Si necesitamos que al acceder un formulario se deshabilite el item de menú "contabilidad", tenemos tres pasos:
1) En el item de menú Contabilidad (con el diseñador de menu)
SKIP FOR: _screen.aMenu[3,2]
2) En el LOAD del formulario que deshabilita el Menú:
_Screen.amenu[3,2]=.T. (el menú se deshabilita)
3) En el UNLOAD del formulario
_Screen.aMenu[3,2]= .F. (se rehabilita el Menú).

La norma es que la barra principal del menú, solamente debe llamar a sus subMenú. De esa forma, no importa que los formularios modales no deshabiliten la barra principal. Todo lo operativo que quedará deshabilitado.


Por otra parte, la llamada de un menú creado para formularios de nivel superior ShowWindow=2 es asi:
* Init del formulario. suponiendo que el menú se llama GesTransp.mpr
DO GesTransp.mpr WITH This , .T.

Cuando el formulario se llama con DO FORM, se ejecutan los métodos LOAD, el Init de todos los objetos cargados, el Init del form, el método Show del form que dispara el Activate Event del form.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar