Menù a scelta rapida

di il
4 risposte

Menù a scelta rapida

Ciao a tutti,

volevo chiedere un consiglio, in un applicazione che ho creato ci sono diverse maschere.
ho creato una macro "autoexec" che richiama una funzione per disabilitare caricare menu personalizzati ecc..

vorrei inserire un codice che disabiliti anche i menu di scelta rapida tutte le mascherer, senza dover inserire nell'evento caricamento di ogni singola form l'istruzione "ShortcutMenu" ecc...
p.e. Forms!status_motors.ShortcutMenu = False

qualcuno ha qualche idea?

grazie per la collaborazione

4 Risposte

  • Re: Menù a scelta rapida

    Se non vuoi i Popup, quando le apri in struttura rimuovi i Popup in modo definitivo... non vedo perchè lanciare codice per una cosa che deve essere strutturale.
    Ovviamente se ha 180 Maschere, e convengo sia rognoso, 3 righe di Ciclo in una Funzione che lanci e che ciclando la Collection AllForms, apre la Form in modalità Struttura, modifica la proprietà CHIUDE SALVANDO.
    Ovviamente anche i Report.

    Finito il codice lo elimini, perchè non serve più.
  • Re: Menù a scelta rapida

    Ciao Alex

    volevo scrivere una funzione, per avere a disposizione i menù a scelta rapida quando entro nell'applicazione ignorando la macro autoexec

    io ho provato a scrivere questa, ma funziona solo con le maschere aperte, altrimenti mi restituisce l'errore che non trpova la maschera

    Public Function off_sh_menu()
    Dim nmfrm As Variant
    For Each Form_Name In CurrentProject.AllForms
    nmfrm = Form_Name.Name
    Forms.Item(nmfrm).ShortcutMenu = False
    Next Form_Name
    End Function

    cosa sbaglio?

    grazie 1000
  • Re: Menù a scelta rapida

    Fai attenzione, prova a ragionare su quello che stai facendo...!
    Se vuoi ciclare tutte le maschere, ovvio che le devi aprire per modificare ShortcutMenu, perchè da chiuse non hanno effetto se non passando per la Struttura, quindi significa 2 cose...:
    1) Devi aprire in Struttura, modificare e Salvare, che non è quello che fai tu...
    2) NON DISTRIBUIRAI MAI il Runtime(Accde)... e te lo sconsiglio.
    Questo perchè la proprietà ShortcutMenu non la puoi modificare RUNTIME in una maschera chiusa.
    L'elenco delle Maschere tutte, è nella Collection Containers, sottoCollection Forms, SottoCollection Documents
    
    Function SetMenu(Optional Value As Boolean = False)
        Dim db      As DAO.Database
        Dim doc     As Document
        Dim frm     As Access.Form
        Set db = CurrentDb
        
        With db.Containers!Forms
            For Each doc In .Documents
                DoCmd.OpenForm doc.Name, acDesign
                Set frm = Forms(doc.Name).ShortcutMenu = Value
                DoCmd.Close acForm, doc.Name, acSaveYes
            Next
        End With
    End Function
    Se invece la vuoi modificare RUNTIME allora lo puoi fare SOLO quando la maschera si apre... alchè basta fare così:
    
    ' IN un MODULO bas
    Private bMnuEnabler   As Boolean
    
    Function SetEnabler(Optional Value As Boolean = True)
        bMnuEnabler = Value
    End Function
    
    Function SetMenu()
        Dim mf      As Access.Form
        Set mf = CodeContextObject
        mf.ShortcutMenu = Not bMnuEnabler
    End Function
    
    In AutoExec fai eseguire la Funzione SetEnabler senza parametri, ed in tutte le maschere su Evento Load nella maschera proprietà incolli =SetMenu() e viene richiamato senza scrivere codice nel VBEditor.
    Quando il DB lo apre un utente la costante vale True, ma Negata = False ed il menù sarà DISABILITATO, se lo apri tu che Bypassi AutoExec la Variabile vale False che Negata=True
  • Re: Menù a scelta rapida

    Ok grazie Alex

    chiaro come sempre
Devi accedere o registrarti per scrivere nel forum
4 risposte