Menu en Mdi

Menu en Mdi

Postby FiveWiDi » Sat Sep 24, 2022 8:31 am

Hola a todos,

Estoy trabajando con ventanas MDI.

Se trata de una aplicación antigua y la estoy actualizando, con lo que no sé si la cuestión está en el propio código, yo no lo encuentro.

El caso es que al abrir una nueva ventana MdiChild, en la última opción del menú se añade una linea (como un MENUITEM más) con el nombre de la ventana, de manera que en teoría al seleccionar esta nueva opción del menú se le da el foco a la ventana correspondiente.

Pero es que además si altero el menú eliminando o añadiendo opciones, esto no sucede.

Me estoy volviendo un poco loco, ya no sé qué mirar, no encuentro el código correspondiente que hace eso.

¿Cómo se puede desactivar esta funcionalidad?
¿Dónde está?

Muchas gracias
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby leandro » Sat Sep 24, 2022 5:23 pm

Puedes personalizar el menu el inicio de la aplicación, nosotros lo hacemos de la siguiente manera:

Code: Select all  Expand view  RUN

**********************************
*MENU PARA CONTROL DE VENTANAS MDI
**********************************
function BuildMenu2()
   local oMenu
   MENU oMenu COLORPNEL oLamcla:nClrTxtMenu, oLamcla:nClrMenu
      MENUITEM "&Organizar Ventanas"
      MENU
         MENUITEM "&Salir" RESOURCE oLamcla:cIcoCer ACTION ( oWnd:closeall(),oWnd:End())
         SEPARATOR
         MENUITEM "&Ventanas"
         MENU
           MENUITEM "Mosaico" RESOURCE oLamcla:cIcoMos action( oWnd:Tile() )
           MENUITEM "Cascada" RESOURCE oLamcla:cIcoCas action( oWnd:Cascade() )
           MENUITEM "Minimizar" RESOURCE oLamcla:cIcoMin action( oWnd:iconizeall() )
           MENUITEM "Cerrar Todas" RESOURCE oLamcla:cIcoTod action( oWnd:Closeall() )
         ENDMENU
      ENDMENU
   ENDMENU
return oMenu

...
...

DEFINE WINDOW oWnd MDI TITLE ttitu ICON "#8001" BRUSH oBrsh

...
...

  oWnd:bPainted := {|hDC| FW_DrawImage( hDC, ".\res\fondo-logo.png", { 0,0, 668, 668 } ),;
            oRBar:CalcPos(), oWnd:SetMenu( BuildMenu2() )}

...
...

ACTIVATE WINDOW oWnd

 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Menu en Mdi

Postby FranciscoA » Sat Sep 24, 2022 8:22 pm

Hola, Si entendí bien, y lo que quieres es desactivar que se agregue el menuitem al abrir la ventana MdiChild, puedes intentar con:
Code: Select all  Expand view  RUN
  DEFINE WINDOW oWnd MDI TITLE "MI VENTANA MDI"   ;
             MENUINFO 0    //<-- esto
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Menu en Mdi

Postby Antonio Linares » Sun Sep 25, 2022 9:30 am

Carlos,

Puedes construir FWH\samples\testmdi2.prg y comprobar si todo va bien ?

gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Menu en Mdi

Postby FiveWiDi » Sun Sep 25, 2022 12:32 pm

FranciscoA wrote:Hola, Si entendí bien, y lo que quieres es desactivar que se agregue el menuitem al abrir la ventana MdiChild, puedes intentar con:
Code: Select all  Expand view  RUN
  DEFINE WINDOW oWnd MDI TITLE "MI VENTANA MDI"   ;
             MENUINFO 0    //<-- esto
 


Hola Francisco,

Parece que funciona.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby FiveWiDi » Sun Sep 25, 2022 12:41 pm

Antonio Linares wrote:Carlos,

Puedes construir FWH\samples\testmdi2.prg y comprobar si todo va bien ?

gracias


Lo curioso es que a veces aparecen estas opciones (opciones de menú con el nombre de la ventana), y a veces no.

Voy a ver si construyo el ejemplo.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby karinha » Sun Sep 25, 2022 1:40 pm

Carlos, ¿podrías mostrar una foto por favor? Es un poco confuso. Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Menu en Mdi

Postby FiveWiDi » Sun Sep 25, 2022 9:50 pm

karinha wrote:Carlos, ¿podrías mostrar una foto por favor? Es un poco confuso. Gracias.

Regards, saludos.


No sé como poner una foto aquí. La tengo en mi disco duro.

Aprovecho y explico.

Indicando la cláusula "MENUINFO 0" se resuelve:

DEFINE WINDOW AMPAArra[1][1][2][1][1] MDI ; // Definimos la ventana
FROM 2,2 TO 30,80; // Coordenadas
TITLE "El titulin" ; // Título
MENU MenuMain( AMPAArra ) ; // Menú
MENUINFO 0

Cómo reproduzco el error (sin indicar MENUINFO 0) ?

a-abro ventana MDI con el menú definido MenuMain( AMPAArra )
b-abro ventana MDICHID
c-realizo un AMPAArra[1][1][2][1][1]:Setmenu( nuevomenu( AMPAARRA) )
Ahora el menú 'principal/horizontal' tiene 10 opciones; funciona correctamente, la opción 'Ayuda' es correcta.
d-realizo un nuevo AMPAArra[1][1][2][1][1]:Setmenu( masnuevomenu( AMPAARRA) )
Ahora el menú 'principal/horizontal' tiene MÁS de 10 opciones; se muestra en la última opción 'Ayuda' un menú tipo MRU con tantas opciones como ventanas MDI tenga abiertas.

Es algo muy raro, puedo realizar las acciones b, c y d las veces que quiera, y en un menú no aparecen estas opciones tipo MRU y en el otro si.

Gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby Antonio Linares » Mon Sep 26, 2022 4:25 am

Carlos,

Puedes proporcionar el PRG completo para probarlo aqui ?

gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Menu en Mdi

Postby karinha » Mon Sep 26, 2022 2:32 pm

Carlos,

http://imgur.com/?

Simples.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Menu en Mdi

Postby FiveWiDi » Mon Sep 26, 2022 10:33 pm

karinha wrote:Carlos,

http://imgur.com/?

Simples.

Regards, saludos.


Gracias Karinha, sigo haciendo pruebas.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby FiveWiDi » Mon Sep 26, 2022 10:48 pm

Antonio Linares wrote:Carlos,

Puedes proporcionar el PRG completo para probarlo aqui ?

gracias


Hola Antonio,

No puedo proporcionarlo porque forma parte de un entramado de ventanas y de una arquitectura propia del programa que me impide desvincular el código sin modificarlo mucho.

Si que he conseguido compilar testmdi2.prg, en él se crean de manera automática los menús Child, Window y Help, del menú Window se cuelgan MRU con los nombres de las ventanas que se van creando y permite acceder a cada ventana pulsando sobre el MRU correspondiente.

En mi caso el menu MRU lo crea en la última opción del menu, "Ajuda", però no funciona el acceder mediante el MRU a la ventana escogida; debe ser cosa de como están relacionadas las propias ventanas en esa arquitectura, el programa siempre tiene una MDI Hide(), quizás esto perjudique el funcionamiento de los accesos MRU, o la difinición propia del ACTION del MRU con un Handle de ventana erróneo (porque esa ventana oculta aparece en el MRU y no debería), no sé.

Si que he creado un prova.prg para jugar con las MDI; cuando lo ejecuto, el menu MRU se cuelga de la primera opción de menú, no tengo ni idea de por que se cuelga de esa opción y no de la última que se llama "Ayuda".

La cuestión es que indicando la cláusula "MENUINFO 0" el MRU no se crea, que es lo que quería.

Agradezco el interés pero lo dejaré aquí, estoy agotado estos días y el problema lo tengo resuelto... supongo.

El prova.prg:
Code: Select all  Expand view  RUN

#include "FiveWin.ch"

STATIC oMdi := Nil
STATIC nContador := 0

/* Aquí empieza el program principal.
   ----------------------------------*/

FUNCTION MAIN()


/* Se define la ventana principal
---------------------------------*/

DEFINE WINDOW oMdi MDI ;             // Definimos la ventana
    FROM 2,2 TO 30,80;                                  // Coordenadas
    TITLE "Prova." ;  // Título
    MENU MenuMain() ; // Menú
    MENUINFO 0

/* Se define la barra de mensajes
---------------------------------*/

SET MESSAGE OF oMdi ;
    TO "aa " ;
    CENTERED ;
    CLOCK ;
    DATE ;
    KEYBOARD ;
    NOINSET


/* Se activa la ventana principal
---------------------------------*/

ACTIVATE WINDOW oMdi ;
    MAXIMIZED ;
    ON INIT ( .T. )  ;
    VALID (  MsgNoYes("Vol sortir del programa?", "Atenció!" ) )

Return Nil
// Fi de la funció d'arrancada.
/* *************************************************** */
/* *************************************************** */
FUNCTION MenuMain()

Local oMenumain := Nil

    MENU oMenumain

        MENUITEM "1ro."
            MENU
                MENUITEM "Ventanita, ventanita" ACTION mdichild()
                MENUITEM "Cambia a menu 10" ACTION Menu10()
                MENUITEM "Cambia a menu > 10" ACTION MenuMas10()
                MENUITEM "&Sortir" ACTION oMdi:End()
            ENDMENU


    ENDMENU

Return oMenumain
/* *************************************************** */
/* *************************************************** */
FUNCTION MdiChild()

Local oLaMdiChid


DEFINE WINDOW oLaMdiChid MDICHILD FROM 0,0 TO 520,804 TITLE ;
    "Ventanita, ventanita.." + Str( ++nContador,3,0) OF oMdi ;
    NOZOOM PIXEL //FIVEWIDI

@ 408,721 SAY "Aquí estamos.." + Str( ++nContador,3,0) OF oLaMdiChid COLORS CLR_HBLUE,CLR_HRED ;
    CENTER PIXEL SIZE 15,15 UPDATE //FIVEWIDI

ACTIVATE WINDOW oLaMdiChid

Return Nil
/* *************************************************** */
/* *************************************************** */
FUNCTION Menu10()
Local oMenu10 := Nil

    MENU oMenu10

        MENUITEM "Opcion 1"
            MENU
                MENUITEM "Ventanita, ventanita" ACTION mdichild()
                MENUITEM "Cambia a menu 10" ACTION Menu10()
                MENUITEM "Cambia a menu > 10" ACTION MenuMas10()
                MENUITEM "&Sortir" ACTION oMdi:End()
            ENDMENU
        MENUITEM "Opcion 2"
        MENUITEM "Opcion 3"
        MENUITEM "Opcion 4"
        MENUITEM "Opcion 5"
        MENUITEM "Opcion 6"
        MENUITEM "Opcion 7"
        MENUITEM "Opcion 8"
        MENUITEM "Opcion 9"
        MENUITEM "Ayuda"
            MENU
                MENUITEM "Ayuda 1"
                MENUITEM "Ayuda 2"
            ENDMENU        

    ENDMENU

oMdi:Setmenu(oMenu10)

Return oMenu10
/* *************************************************** */
/* *************************************************** */
FUNCTION MenuMas10()
Local oMenuMas10 := Nil

    MENU oMenuMas10

        MENUITEM "Opcion 1"
            MENU
                MENUITEM "Ventanita, ventanita" ACTION mdichild()
                MENUITEM "Cambia a menu 10" ACTION Menu10()
                MENUITEM "Cambia a menu > 10" ACTION MenuMas10()
                MENUITEM "&Sortir" ACTION oMdi:End()
            ENDMENU
        MENUITEM "Opcion 2"
        MENUITEM "Opcion 3"
        MENUITEM "Opcion 4"
        MENUITEM "Opcion 5"
        MENUITEM "Opcion 6"
        MENUITEM "Opcion 7"
        MENUITEM "Opcion 8"
        MENUITEM "Opcion 9"
        MENUITEM "Opcion 10"
        MENUITEM "Opcion 11"
        MENUITEM "Opcion 12"
        MENUITEM "Opcion 13"
        MENUITEM "Opcion 14"
        MENUITEM "Opcion 15"
        MENUITEM "Ayuda"
            MENU
                MENUITEM "Ayuda 1"
                MENUITEM "Ayuda 2"
            ENDMENU        

    ENDMENU

oMdi:Setmenu(oMenuMas10)

Return oMenuMas10
/* *************************************************** */
/* *************************************************** */
// Fi de la funció d'arrancada.
*eof: prova.PRG
 


Muchas gracias
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby Antonio Linares » Tue Sep 27, 2022 6:38 am

Carlos,

Pues si te funciona asi y te soluciona el problema, genial! :-)

Hay algo que tengamos que arreglar ? :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Menu en Mdi

Postby FiveWiDi » Tue Sep 27, 2022 1:03 pm

Antonio Linares wrote:Carlos,

Pues si te funciona asi y te soluciona el problema, genial! :-)

Hay algo que tengamos que arreglar ? :-)


Hola Antonio,

Yo creo que si.

Si una MDICHILD està oculta ( Hide() ) no debería aparecer en el menú MRU de las MDICHILD definidas y disponibles; si está oculta es para que el usuario no la vea y no acceda a ella, entiendo.

Muchas gracias
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: Menu en Mdi

Postby Antonio Linares » Tue Sep 27, 2022 3:02 pm

Carlos,

buscaremos documentación y a ver que se puede hacer :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 91 guests