** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Menu contextual
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoMenu contextual

 Responder Responder
Autor
Mensaje
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Tema: Menu contextual
    Enviado: 17/Enero/2018 a las 17:53
Hola:
Tengo un menú contextual (botón derecho) que cree para una aplicación en Access 2003 ha migrado a A2010 hace ya unos años y conservo este menú contextual en la aplicación.
Quiero modificarlo pero para ello creo que necesito tener instalado A2003 para proceder de la misma forma que se creo.
Mi pregunta es alguien tiene algún ejemplo de como se crean los menús contextuales en A2010 o donde puedo destripar alguno de ellos para ver la lógica de su creación.
Saludos y gracias.
Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
ceac Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 05/Octubre/2007
Localización: Colombia
Estado: Sin conexión
Puntos: 1467
Enlace directo a este mensaje Enviado: 17/Enero/2018 a las 18:44
Hola RRoca!

Pues nuestro amigo Neckkito, lo explica mejor que nadie, y si, hay que trabajar con macros aún.

«Todos morimos, pero sólo unos pocos viven de verdad» Mel Gibson - Corazón Valiente

Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4310
Enlace directo a este mensaje Enviado: 18/Enero/2018 a las 20:04
Buenas

Un buen enlace era este

http://blogs.msdn.com/b/access/archive/2009/05/21/how-to-create-a-shortcut-menu-for-a-form-form-control-or-report.aspx


Pero parece que esta caido

Te dejo algunas lineas de código para que puedan servirte de ayuda




Office 12.0 >> Access 2007
Office 14.0 >> Access 2010
Office 15.0 >> Access 2013
Office 16.0 >> Access 2016


Referencia Microsoft Office 12.0 Object Library

Private Sub Command0_Click()
    ' Display the shortcut menu when the user clicks the button.
    Application.CommandBars("cmdFormFiltering").ShowPopup
End Sub




Example 1: A Simple Shortcut Menu
Sub CreateSimpleShortcutMenu()
'Microsoft Office 12.0 Object Library
    Dim cmbShortcutMenu As Office.CommandBar
   
    ' Create a shortcut menu named "SimpleShortcutMenu".
    Set cmbShortcutMenu = CommandBars.Add("SimpleShortcutMenu", _
                        msoBarPopup, False, False)
                       
    ' Add the Remove Filter/Sort command.
    cmbShortcutMenu.Controls.Add Type:=msoControlButton, Id:=605
   
    ' Add the Filter By Selection command.
    cmbShortcutMenu.Controls.Add Type:=msoControlButton, Id:=640
   
    Set cmbShortcutMenu = Nothing
End Sub



Example 2: A Shortcut Menu With Grouping
Sub CreateShortcutMenuWithGroups()
    Dim cmbRightClick As Office.CommandBar
   
    ' Create the shortcut menu.
    Set cmbRightClick = CommandBars.Add("cmdFormFiltering", _
                      msoBarPopup, False, False)
   
    With cmbRightClick
        ' Add the Find command.
        .Controls.Add msoControlButton, 141
       
        ' Start a new grouping and add the Sort Ascending command.
        .Controls.Add(msoControlButton, 210).BeginGroup = True
       
        ' Add the Sort Descending command.
        .Controls.Add msoControlButton, 211
       
        ' Start a new grouping and add the Remove Filer/Sort command.
        .Controls.Add(msoControlButton, 605).BeginGroup = True
       
        ' Add the Filter by Selection command.
        .Controls.Add msoControlButton, 640
       
        ' Add the Filter Excluding Selection command.
        .Controls.Add msoControlButton, 3017
       
        ' Add the Between... command.
        .Controls.Add msoControlButton, 10062
    End With
End Sub


Example 3: A Shortcut Menu for Reports
Sub CreateReportShortcutMenu()
    Dim cmbRightClick As Office.CommandBar
    Dim cmbControl As Office.CommandBarControl

    Set cmbRightClick = CommandBars.Add("cmdReportsRightClick", _
                                        msoBarPopup, False, False)

    With cmbRightClick
       
        ' Add the Print command.
        Set cmbControl = .Controls.Add(msoControlButton, 2521)
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Quick Print"
       
        ' Add the Print command.
        Set cmbControl = .Controls.Add(msoControlButton, 15948)
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Select Pages"
       
        ' Add the Page Setup... command.
        Set cmbControl = .Controls.Add(msoControlButton, 247)
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Page Setup"
       
        ' Add the Mail Recipient (as Attachment)... command.
        Set cmbControl = .Controls.Add(msoControlButton, 2188)
        ' Start a new group.
        cmbControl.BeginGroup = True
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Email Report as an Attachment"
       
        ' Add the PDF or XPS command.
        Set cmbControl = .Controls.Add(msoControlButton, 12499)
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Save as PDF/XPS"
       
        ' Add the Close command.
        Set cmbControl = .Controls.Add(msoControlButton, 923)
        ' Start a new group.
        cmbControl.BeginGroup = True
        ' Change the caption displayed for the control.
        cmbControl.Caption = "Close Report"
    End With
   
    Set cmbControl = Nothing
    Set cmbRightClick = Nothing
End Sub



How to Discover the IDs to Use
Function CreateCommandBarsWithIDs()
    Call cbShowButtonFaceIds("CmdIDs_01", 1, 500)
    Call cbShowButtonFaceIds("CmdIDs_02", 501, 1000)
    Call cbShowButtonFaceIds("CmdIDs_03", 1001, 1500)
    Call cbShowButtonFaceIds("CmdIDs_04", 1501, 2000)
End Function

Function cbShowButtonFaceIds(strName As String, _
                             lngIDStart As Long, _
                             lngIDStop As Long)

    Dim cbrNewToolBar As CommandBar
    Dim cmdNewButton As CommandBarButton
    Dim intCntr As Integer

    On Error Resume Next

    ' Delete the CommandBar if it already exists.
    Application.CommandBars(strName).Delete

    ' Create the CommandBar.
    Set cbrNewToolBar = Application.CommandBars.Add( _
                      Name:=strName, temporary:=True)

    ' Loop through the IDs.
    For intCntr = lngIDStart To lngIDStop
        ' Create a new button for each ID.
        Set cmdNewButton = cbrNewToolBar.Controls.Add( _
                         Type:=msoControlButton)

        With cmdNewButton
            .FaceId = intCntr
            .TooltipText = "Faceid= " & intCntr
            .Caption = intCntr
            .Style = msoButtonIconAndCaptionBelow
        End With

        ' This takes awhile to run. Display a count
        ' to indicate progress.
        Debug.Print intCntr & " of " & lngIDStop
    Next intCntr

    ' Display the new CommandBar.
    With cbrNewToolBar
        .Width = 600
        .Left = 100
        .Top = 200
        .Visible = True
    End With

    Set cbrNewToolBar = Nothing
    Set cmdNewButton = Nothing
End Function


Arriba
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Enviado: 19/Enero/2018 a las 12:13
Hola:
De acuerdo con lo que ha indicado Ceac, he verificado los ejemplos de Neckkito, el ejemplo en Access 2003 donde se utiliza el botón derecho para el menú contextual emergente, es lo que tengo en mi aplicación, el ejemplo en 2010 es el clásico menú de ribbon, yo lo que necesito es ver como puedo modificar el que tengo en el formato 2003 o como crearlo de nuevo en 2010, y que salga con el botón derecho como ahora.

No he sabido encontrar ningún ejemplo, y haberlo tendrá que haberlo dado que actualmente en A2010 actua igual que en 2003, por tanto es posible que exista este sistema.

Por este motivo he solicitado algún ejemplo, ya que esta es la forma mas clara para comprender su construcción y funcionamiento.

Saludos.

Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Enviado: 19/Enero/2018 a las 12:14
Hola Javier Mil, gracias por la información y el codigo que has adjuntado, pero la verdad no se ni donde hay que ponerlo ni como o cuando ejecutarlo.
Podrias darme mas información. Saludos y gracias.
Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
ceac Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 05/Octubre/2007
Localización: Colombia
Estado: Sin conexión
Puntos: 1467
Enlace directo a este mensaje Enviado: 19/Enero/2018 a las 22:35
Hola RRoca, no se si has visto en el PDF del 2010, pagina 9 dice: "Segunda parte del ejemplo: Menú Contextual"

Ese es para Access 2010!
«Todos morimos, pero sólo unos pocos viven de verdad» Mel Gibson - Corazón Valiente

Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4991
Enlace directo a este mensaje Enviado: 20/Enero/2018 a las 00:25
Un pequeño ejemplo:
https://www.dropbox.com/s/c2ajbjyx6lnyd2j/Menu.accdb?dl=0

Saludos.
Arriba
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Enviado: 22/Enero/2018 a las 13:47
Hola:

Sobre la pagina que me proporciona ceac, he descartado este sistema dado que se trabaja con macros y no estoy muy informado sobre este sistema de programación.

El ejemplo de emiliove aquí si se trabja con código y una vez revisado el ejemplo ya conozco el sistema (uno de ellos) para crear menus emergentes contextuales.

Pero el ejemplo que me proporciona JavierMil, una vez completada la información en esta pagina de Microsof

https://msdn.microsoft.com/es-es/vba/access-vba/articles/create-a-shortcut-menu-for-a-form-form-control-or-report

Ya he comprendido perfectamente como crear menus emergentes contextuales, pero me queda la duda... el menú que importe de A2003 tendría que estar generado con un código, donde esta este código dentro la DB... pues si se pudiera localizar seria mas fácil modificarlo que no tener que crear el menú nuevamente.

Alguien de vosotros sabe donde se almacenas este código de un menú contextual importado desde otra DB ?

Saludos y gracias por vuestra colaboración.

Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4310
Enlace directo a este mensaje Enviado: 22/Enero/2018 a las 20:05
Hola

Quizás No te haya entendido bien,........... pero diría que hay 2 tipos de menus contextuales. El que viene de fabrica , es decir el que trae el propio Access , y ese menú me imagino que se guardara en el núcleo del propio Access.
Los otros menús contextuales personalizados es decir los que el desarrollador crea por código se guardan en el código VBA , Módulos Standard , Módulos de Formularios etc etc...
Arriba
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Enviado: 24/Enero/2018 a las 12:10
Hola,
Efectivamente el código lo puedes guardar tanto en los módulos como en el código de un modulo en un formulario del proyecto.

Una vez ejecutas este código ya se crea el menú contextual y queda almacenado dentro el núcleo de Access, es mas si ejecutas nuevamente este código da un error porque encuentra que ya esta creado.

Pero el caso es que en mi menú de A2003 que importé no hay ningún código para crearlo, lo había en A2003 pero no en A2010, lógicamente si menu funciona correctamente quiere decir que el código se ejecuta, en un sitio u otro esta este código... lo que pretendo es conseguir este código para modificarlo... parece que no sea posible.

Saludos.

Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
01loko Ver desplegable
Asiduo
Asiduo


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 475
Enlace directo a este mensaje Enviado: 24/Enero/2018 a las 14:23
en mi ignorancia:
abrimos visual basic
edicion buscar
bucamos una de las entradas del menu


Si esta en el codigo, deberia aparecer
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4310
Enlace directo a este mensaje Enviado: 24/Enero/2018 a las 15:03
Ricard

fíjate en la linea que poste arriba donde pone:

Set cbrNewToolBar = Application.CommandBars.Add(Name:=strName, temporary:=True)

La opción "temporary: "  te permite crear el menú de forma temporal , eso significa que cada vez que entres a la base de datos , deberías ejecutar el código, ya que se creo de forma temporal.
Si por el contrario escogiste la opción
temporary:= False significa que el menú que hayas creado sera definitivo y No sera necesario volverlo a crear. Y me imagino que es por eso te da error.




Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4310
Enlace directo a este mensaje Enviado: 24/Enero/2018 a las 15:15
Te dejo una pequeña rutina por si te puede servir

Public Function funListarCommandBars()
On Error Resume Next

Rem  Toolbar                    msoBarTypeNormal        0
Rem  Menu bar                   msoBarTypeMenuBar       1
Rem  Popup(or shortcut)         msoBarTypePopup         2
Rem  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rem  Custom                     msoControlCustom                0
Rem  Button                     msoControlButton                1

Rem  Edit                       msoControlEdit                  2
Rem  Dropdown                   msoControlDropdown              3
Rem  Combo Box                  msoControlComboBox              4
Rem  Button Dropdown            msoControlButtonDropdown        5
Rem  Generic Dropdown           msoControlGenericDropdown       8
Rem  Popup                      msoControlPopup                 10
Rem  Button Popup               msoControlButtonPopup           12
Rem  Split Button Popup         msoControlSplitButtonPopup      13
Rem  Split Button Popup (MRU)   msoControlSplitbuttonMRUPopup   14



    Dim offCommandBar As Office.CommandBar
    Dim offCommandBarControl As Office.CommandBarControl
   

    For Each offCommandBar In Application.CommandBars

            For Each offCommandBarControl In offCommandBar.Controls
               
                Debug.Print "Nombre=  " & offCommandBar.Name
                Debug.Print "Caption=  " & offCommandBarControl.Caption
                Debug.Print "offCommandBarControl.OnAction=  " & offCommandBarControl.offCommandBarControl.OnAction
               
                Debug.Print "Tipo=  " & offCommandBarControl.Type
                Debug.Print "Accion=  " & offCommandBarControl.OnAction
                Debug.Print "Descripcion=  " & offCommandBarControl.DescriptionText
                Debug.Print "Id=  " & offCommandBarControl.Id
                Debug.Print "Index=  " & offCommandBarControl.Index
                Debug.Print "Tag=  " & offCommandBarControl.Tag
                Debug.Print "Enabled=  " & offCommandBarControl.Enabled
                Debug.Print "++++++++++++++++++++++++++++++++"
                Debug.Print " "
            Next offCommandBarControl

    Next offCommandBar
   
    MsgBox "Fin", vbInformation, "Javier.Mil"

End Function


Arriba
RRoca Ver desplegable
Colaborador
Colaborador


Unido: 02/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 4817
Enlace directo a este mensaje Enviado: 24/Enero/2018 a las 16:08
Hola Javier:

He ejecutado el código que me has pasado y obtengo estos datos:

Id= 22332
Index= 4
Tag=
Enabled= Falso
++++++++++++++++++++++++++++++++

Nombre= Calculated Field
Caption= Fe&cha/Hora
Tipo= 1
Accion=
Descripcion=
Id= 22333
Index= 5
Tag=
Enabled= Falso
++++++++++++++++++++++++++++++++

Nombre= Envelope
Caption= &Sobre
Tipo= 21
Descripcion=
Id= 3746
Index= 1
Tag=
Enabled= Verdadero
++++++++++++++++++++++++++++++++

Sigue... hay mas información que corto por no ser relevante.

Yo ejecute el ejemplo de la pagina de Microsoft que indico, y que es un código semejante al que me pasaste el 18/01 y me creo tres menús que luego utilice colocándolos en distintos formularios o informes funcionando correctamente.

En el ejemplo utilizado no se usa Temporary=False puesto que crea definitivamente los menús, si se corre el codigo nuevamente dará error porque ya existen, previamente hay que deletear los menús tal y como hace emiolive en su ejemplo del 20/01.

A mi me interesa conseguir el código que ha creado el menú contextual y que fue creado en A2003, creo que eso es imposible por lo que veo, el menú de A2003 al importarlo se queda internamente en Access ejecutándose sin problema pero no puede extraerse su código.

Esta visto que no tengo otra solución que crear nuevamente el menú para la versión superior a A2003, así pues por mi parte podeís cerrar el hilo, no sin antes agradecer a todos los participantes la colaboración. Saludos.
Romain Rolland (1866-1944) escritor y ensayista frances dijo: Crear, es matar la muerte. (para mi, filosoficamente penetrante)
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable