Page 1 of 1

Consulta sobre menú en modo consola

Posted: Thu Jan 21, 2016 12:15 pm
by abinfra
Hola a todos.
Tengo un programa en modo consola, en el cual tengo creado un menú principal:
DIARIOS FICHEROS INFORMES CIERRES SERVICIOS EMPRESAS TERMINAR

Por cada opción del menú principal hay otras opciones. Por ejemplo en CIERRES hay cuatro submenús, a saber:
Mensual
Trimestral IVA
Cierre Anual
Creación Año Nuevo


Al entrar y después salir de cada submenú, desaparece el menú con los cuatro submenús y solo se ve el menú principal, posicionándose en CIERRES.

Este sería el código del menú CIERRES:

// Crea el menú CIERRES en el menú principal (oPorUp)
oPopUp := PopUp()
oPopUp :ColorSpec:= "b/w,gr+/rb,r/w,g/rb,n+/w,w+/b"
oTopBar:AddItem( MenuItem ( "&CIERRES",oPopUp, K_CTRL_C, "Mensual Asesoría, Trimestral IVA, Cierre Anual y Creación Año Nuevo.") )


// Agrega elementos de menú para el menú emergente CIERRES
oItem :=MenuItem( "&Mensual" ,{|| AsiMensL(03,32) }, K_CTRL_M, "Asiento Mensual Asesoría.")
oPopUp:AddItem( oItem)


// Agrega elementos de menú para el menú emergente CIERRES
oItem :=MenuItem( "&Trimestral IVA" ,{|| CiTrIVAL(04,32) }, K_CTRL_T, "Cierre Trimestral IVA.")
oPopUp:AddItem( oItem)


// Agrega elementos de menú para el menú emergente CIERRES
oItem :=MenuItem( "Cierre &Anual" ,{|| Ci_Anual(05,32) }, K_CTRL_A, "Asiento de Excplotación (Pérdidas y Ganancias).")
oPopUp:AddItem( oItem)


// Agrega elementos de menú para el menú emergente CIERRES
oItem :=MenuItem( "&Creación Año Nuevo" ,{|| Cr_Ano_N(06,32) }, K_CTRL_C, "Cierre por Creación de Año Nuevo.")
oPopUp:AddItem( oItem)


La pregunta es:
¿Qué puedo hacer para que cuando salga de cada submenú, me quede posicionado en este submenú del que acabo de salir?
Por ejemplo si he entrado en el submenú “Mensual”, que se quede posicionado en dicho submenú de “Mensual” al salir.

Saludos cordiales.

Re: Consulta sobre menú en modo consola

Posted: Sun Jan 31, 2016 4:47 pm
by LOUIS
Hola Abinfra, espero ayudarte con esto ...

Code: Select all

*---------------------------*
PROC MODULOS

CLEA
DO WHILE .T.
   @ 00,00 PROM "DIARIOS"
   @ 00,10 PROM "FICHEROS"
   @ 00,20 PROM "INFORMES"
   @ 00,30 PROM "CIERRES"
   @ 00,40 PROM "SERVICIOS"
   @ 00,50 PROM "EMPRESAS"

   MENU TO ABINFRA
   IF ABINFRA = 0
      EXIT			&& TERMINAR
    elseif ABINFRA = 1
      DO DIA
    elseif ABINFRA = 2
      DO FICH
    elseif ABINFRA = 3
      DO INFO
    elseif ABINFRA = 4
      DO CIERRE			&& <--- EJECUTAMOS
    elseif ABINFRA = 5
      DO SERV
    elseif ABINFRA = 6
      DO EMP
   ENDIF
ENDDO
CLOS ALL
RETU

*---------------------------*
PROC CIERRE

@ 1,0 CLEA TO 42,132
priva a,b,c ... etc

DO WHILE .T.
   @ 2,00 PROM " M E N S U A L "
   @ 2,20 PROM "  TRIMESTRAL   "
   @ 2,40 PROM "   A N U A L   "
   @ 2,60 PROM "   NUEVO AÑO   "

   MENU TO ABI1
   IF ABI1 = 0
      EXIT
   ELSE
      DO ABI2
   ENDIF
ENDDO
CLOS ALL
RETU

*---------------------------*
PROC ABI2

@ 3,0 CLEA TO 42,132

DO WHILE .t.
   IF ABI1 = 1
      @ 3,0 TO 7,19 DOUB
      @ 4,1 PROM " PROGRAMA A "
      @ 5,1 PROM " PROGRAMA B "
      @ 6,1 PROM " PROGRAMA C "
   elseif ABI1 = 2
      @ 3,20 TO 7,39 DOUB
      @ 4,21 PROM " PROGRAMA A "
      @ 5,21 PROM " PROGRAMA B "
      @ 6,21 PROM " PROGRAMA C "
   elseif ABI1 = 3
      @ 3,40 TO 7,59 DOUB
      @ 4,41 PROM " PROGRAMA A "
      @ 5,41 PROM " PROGRAMA B "
      @ 6,41 PROM " PROGRAMA C "
   elseif ABI1 = 4
      @ 3,60 TO 7,79 DOUB
      @ 4,61 PROM " PROGRAMA A "
      @ 5,61 PROM " PROGRAMA B "
      @ 6,61 PROM " PROGRAMA C "
   ENDIF

   MENU TO ABI3
   IF ABI3 = 0
      EXIT
   ENDIF
   IF ABI1 = 1
      IF ABI3 = 1
         DO A1
      elseif ABI3 = 2
         DO B1
      elseif ABI3 = 3
         DO C1
      ENDIF
   elseif ABI1 = 2
      IF ABI3 = 1
         DO A2
      elseif ABI3 = 2
         DO B2
      elseif ABI3 = 3
         DO C2
      ENDIF
   elseif ABI1 = 3
      IF ABI3 = 1
         DO A3
      elseif ABI3 = 2
         DO B3
      elseif ABI3 = 3
         DO C3
      ENDIF
   elseif ABI1 = 4
      IF ABI3 = 1
         DO A4
      elseif ABI3 = 2
         DO B4
      elseif ABI3 = 3
         DO C4
      ENDIF
   ENDIF
ENDDO
RETU

Re: Consulta sobre menú en modo consola

Posted: Tue Feb 02, 2016 7:35 am
by abinfra
Hola Louis, gracias por responder.

La estructura de código que me pasas, mas o menos es como la que utilicé en su día (1992) para crear el menú en mi aplicación que hice con Clipper.

Pero al pasarme a HMG, para compilar y enlazar los .PRG que tenía, he utilizado el código que pongo en mi post inicial, pero al salir de un procedimiento o función no se queda en el menú de donde partió.

Dándole vueltas, lo único que se me ha ocurrido, es que al salir del procedimiento o función, a través KEYBOARD CHR..., me posiciono en la parte del menú donde entré para ejecutar el procedimiento o función que acabo de ejecutar.

Saludos cordiales.

Re: Consulta sobre menú en modo consola

Posted: Thu Feb 04, 2016 3:02 pm
by LOUIS
Hola Abinfra, en todo caso lo que trate de decir es que entrando los menus o sub-menus dentro de un Do While, siempre permanecen hasta que Tú des la orden de salir, debiendo regresar al menu o While anterior.

Saludos.

Re: Consulta sobre menú en modo consola

Posted: Thu Feb 04, 2016 5:50 pm
by abinfra
Gracias Louis por el interés mostrado.
Saludos cordiales.