FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Menu en Mdi
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Menu en Mdi
Posted: Sat Sep 24, 2022 08: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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Menu en Mdi
Posted: Sat Sep 24, 2022 05:23 PM
Puedes personalizar el menu el inicio de la aplicación, nosotros lo hacemos de la siguiente manera:

Code (fw): Select all Collapse
**********************************
*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

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Menu en Mdi
Posted: Sat Sep 24, 2022 08: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 (fw): Select all Collapse
   DEFINE WINDOW oWnd MDI TITLE "MI VENTANA MDI"   ;
             MENUINFO 0    //<-- esto
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Menu en Mdi
Posted: Sun Sep 25, 2022 09:30 AM

Carlos,

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

gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: 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 (fw): Select all Collapse
   DEFINE WINDOW oWnd MDI TITLE "MI VENTANA MDI"   ;
             MENUINFO 0    //<-- esto


Hola Francisco,

Parece que funciona.

Muchas gracias,

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: 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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Menu en Mdi
Posted: Sun Sep 25, 2022 01: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
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: Sun Sep 25, 2022 09: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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Menu en Mdi
Posted: Mon Sep 26, 2022 04:25 AM

Carlos,

Puedes proporcionar el PRG completo para probarlo aqui ?

gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Menu en Mdi
Posted: Mon Sep 26, 2022 02:32 PM
Carlos,

http://imgur.com/?

Simples.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: 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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: 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 (fw): Select all Collapse
#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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Menu en Mdi
Posted: Tue Sep 27, 2022 06: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
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: Menu en Mdi
Posted: Tue Sep 27, 2022 01: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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Menu en Mdi
Posted: Tue Sep 27, 2022 03:02 PM

Carlos,

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

regards, saludos

Antonio Linares
www.fivetechsoft.com