Abilitare o disabilitare pulsanti di una ribbon

di il
20 risposte

Abilitare o disabilitare pulsanti di una ribbon

Ciao a tutti,

ho scritto questa procedura per abilitare o disabilitare i tasti (button) di una ribbon. 

Volevo chiedere se esiste un'altra possibilità (per esempio caricare i dati in un vettore) . Inserisco la routine:

Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)
If control.Id = "chiusura" Then
   visibilita = 0
End If
  If visibilita = 1 Then
  
       If control.Id = "Materialix" Or control.Id = "MaterialiMx" Or control.Id = "Materialiread" _
       Or control.Id = "Lottix" Or control.Id = "LottiMx" Or control.Id = "Sottoclassix" Or control.Id = "Fornitorex" _
       Or control.Id = "FornitoreM" Or control.Id = "FornitoriL" Or control.Id = "Clientex" Or control.Id = "ClienteM" _
       Or control.Id = "Societax" Or control.Id = "SocietaM" Or control.Id = "SocietaL" _
       Or control.Id = "Gruppox" Or control.Id = "GruppoMx" Or control.Id = "Grupporead" _
       Or control.Id = "SottoGruppox" Or control.Id = "SottogruppoMx" Or control.Id = "Sottogrupporead" _
       Or control.Id = "Bpark_lottix" Or control.Id = "Cancella_collegamenti_B_Park-lotti" _
       Or control.Id = "ClientiL" Or control.Id = "Distintabasex" Or control.Id = "DistintabaseM" _
       Or control.Id = "Bparksx" Or control.Id = "BparksMx" Or control.Id = "Bparksread" _
       Or control.Id = "Conduttori_lottix" Or control.Id = "modifica_collegamenti_Bpark_lotti" _
       Or control.Id = "Propertyx" Or control.Id = "PropertyL" Or control.Id = "Rdax" _
       Or control.Id = "Rdastampa" Or control.Id = "ModificaRda" Or control.Id = "visual_property" _
       Or control.Id = "Lavorix" Or control.Id = "LavoriL" Or control.Id = "Assicurazionix" Or control.Id = "Assastampa" _
       Or control.Id = "Assmodifica" Or control.Id = "Letturafotx" Or control.Id = "LetturafotM" _
       Or control.Id = "Letturafotalno" Or control.Id = "Letturafotcarpiano" Or control.Id = "Letturafotsettala" _
       Or control.Id = "Letturafotmag5a" Or control.Id = "Letturafotlaica3" Then
           enabled = False
       
       End If
   End If
   If visibilita = 0 Then
   
       If control.Id = "Materialix" Or control.Id = "MaterialiMx" Or control.Id = "Materialiread" _
       Or control.Id = "Lottix" Or control.Id = "LottiMx" Or control.Id = "Sottoclassix" Or control.Id = "Fornitorex" _
       Or control.Id = "FornitoreM" Or control.Id = "FornitoriL" Or control.Id = "Clientex" Or control.Id = "ClienteM" _
       Or control.Id = "Societax" Or control.Id = "SocietaM" Or control.Id = "SocietaL" _
       Or control.Id = "Gruppox" Or control.Id = "GruppoMx" Or control.Id = "Grupporead" _
       Or control.Id = "SottoGruppox" Or control.Id = "SottogruppoMx" Or control.Id = "Sottogrupporead" _
       Or control.Id = "Bpark_lottix" Or control.Id = "Cancella_collegamenti_B_Park-lotti" _
       Or control.Id = "ClientiL" Or control.Id = "Distintabasex" Or control.Id = "DistintabaseM" _
       Or control.Id = "Bparksx" Or control.Id = "BparksMx" Or control.Id = "Bparksread" _
       Or control.Id = "Conduttori_lottix" Or control.Id = "modifica_collegamenti_Bpark_lotti" _
       Or control.Id = "Propertyx" Or control.Id = "PropertyL" Or control.Id = "Rdax" _
       Or control.Id = "Rdastampa" Or control.Id = "ModificaRda" Or control.Id = "visual_property" _
       Or control.Id = "Lavorix" Or control.Id = "LavoriL" Or control.Id = "Assicurazionix" Or control.Id = "Assastampa" _
       Or control.Id = "Assmodifica" Or control.Id = "Letturafotx" Or control.Id = "LetturafotM" _
       Or control.Id = "Letturafotalno" Or control.Id = "Letturafotcarpiano" Or control.Id = "Letturafotsettala" _
       Or control.Id = "Letturafotmag5a" Or control.Id = "Letturafotlaica3" Then
           enabled = True
       End If
   End If
End Sub

Grazie

20 Risposte

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    08/06/2024 - tatixtatix6 ha scritto:


    If control.Id = "chiusura" Then visibilita = 0 End If

    Qualquadra non cosa …

    Allo stato iniziale non è chiusura per cui visibilita è di defaul uguale a 1?

    08/06/2024 - tatixtatix6 ha scritto:


    If visibilita = 1 Then I

             f control.Id = "Materialix" Or control.Id =       

                    "MaterialiMx" Or control.Id = "Materia …." 

             Then enabled = False 

             End If

     End If

    Visibilità=1 quindi

     Se almeno una delle condizioni è vera allora disabilita

    ??

    08/06/2024 - tatixtatix6 ha scritto:


    If visibilita = 0 Then 

              If control.Id = "Materialix" Or control.Id = …

               Then enabled = True

              End If 

    End if

    visibilità= 0 (non so quando sia possibile)

    Se almeno una delle condizioni è vera abilita…

    Sarà il caldo… puoi spiegarmi cosa dovrebbe accadere?

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Quando premo un button della ribbon la variabile visibilita varia e disabilita tutte le caselle della ribbon a apre un form. Quando chiudo il form cambia la variabile visabilita e si riabilitano tutti i comandi. All'apertura e alla chiusura  di ogni form si fa il controllo con le seguenti istruzioni

    Private Sub Form_Load()
    visibilita = 1
       objRibbon.Invalidate
    End Sub
    Private Sub Form_Close()
       visibilita = 0
       objRibbon.Invalidate
    End Sub

    Faccio questo perchè un utente mentre lavora in un form non deve poter fare altro. E la ribbon si riabilita solo quando il form si chiude. 

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Anteponi al codice del pulsante

    If enabled=true…

    Se proprio non puoi disabilitare la fascia dei pulsanti…

    A che serve tutto quel if … or… or…ecc…?

    Sono solo alcuni pulsanti da disabilitare? Ma or li disabilita se una delle condizioni è vera.

    Al momento come funziona?

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Nel link che ti avevo postato c'era tutta una serie di esempi sui ribbons… incluso quello che chiedi.

    Li hai scaricati e studiati…?

    Quello che hai scritto non va bene la funzione deve essere dichiarata nella definizione del ribbon e deve restituire lo stato True/False che verrà assegnato alla proprietà getEnabled, mi pare tu non faccia cosi.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Ciao a tutti,

    ho provato ad utilizzare la Ribbon che in qualche modo faccio funzionare. Ho cercato di studiare in internet ma in italiano non si trova nulla. Ho trovato dei video in inglese ma ovviamente non c'è la teoria. Ho chiesto alla community se si poteva avere qualche spiegazione teorica postando gli esempi che ho fatto e' che funzionano. Ma vorrei capire qualcosa di piu' sul passaggio dati tra XML e VBA che in effetti mi sfugge ancora.

    Non mi e' chiaro il  suggerimento di Sihsandrea. In effetti quello che faccio e':

    1. clicco un  pulsante della ribbon objRibbon ad esempio “Materialix” che apre la scheda (form) di  un nuovo materiale.
    2. Al momento dell'apertura della scheda il form inizia con la procedura di caricamento 
    Private Sub Form_Load()
    visibilita = 1
       objRibbon.Invalidate
    End Sub

    L'istruzione objRibbon.Invalidate mi chiama la procedura 

    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)

    e con la seguente serie di istruzioni (essendo visibilita=1)

    If visibilita = 1 Then
        If control.Id = "Materialix" Or control.Id = "MaterialiMx" Or control.Id = "Materialiread" _
        Or control.Id = "Lottix" Or control.Id = "LottiMx" Or control.Id = "Sottoclassix" Or control.Id = "Fornitorex" _
        Or control.Id = "FornitoreM" Or control.Id = "FornitoriL" Or control.Id = "Clientex" Or control.Id = "ClienteM" _
        Or control.Id = "Societax" Or control.Id = "SocietaM" Or control.Id = "SocietaL" _
        Or control.Id = "Gruppox" Or control.Id = "GruppoMx" Or control.Id = "Grupporead" _
        Or control.Id = "SottoGruppox" Or control.Id = "SottogruppoMx" Or control.Id = "Sottogrupporead" _
        Or control.Id = "Bpark_lottix" Or control.Id = "Cancella_collegamenti_B_Park-lotti" _
        Or control.Id = "ClientiL" Or control.Id = "Distintabasex" Or control.Id = "DistintabaseM" _
        Or control.Id = "Bparksx" Or control.Id = "BparksMx" Or control.Id = "Bparksread" _
        Or control.Id = "Conduttori_lottix" Or control.Id = "modifica_collegamenti_Bpark_lotti" _
        Or control.Id = "Propertyx" Or control.Id = "PropertyL" Or control.Id = "Rdax" _
        Or control.Id = "Rdastampa" Or control.Id = "ModificaRda" Or control.Id = "visual_property" _
        Or control.Id = "Lavorix" Or control.Id = "LavoriL" Or control.Id = "Assicurazionix" Or control.Id = "Assastampa" _
        Or control.Id = "Assmodifica" Or control.Id = "Letturafotx" Or control.Id = "LetturafotM" _
        Or control.Id = "Letturafotalno" Or control.Id = "Letturafotcarpiano" Or control.Id = "Letturafotsettala" _
        Or control.Id = "Letturafotmag5a" Or control.Id = "Letturafotlaica3" Then
            enabled = False
        
        End If
    End If

    mi spegne i pulsanti uno a uno. (Ho studiato il funzionamento andando avanti con tasto F5) 

    Al contrario quando esce dal form 

    Private Sub Form_Close()
       visibilita = 0
       
       objRibbon.Invalidate
    End Sub

    l'istruzione objRibbon.Invalidate richiama sempre la procedura  

    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)

    che con la serie di comandi (essendo visibilita=0)

     If visibilita = 0 Then
    
        If control.Id = "Materialix" Or control.Id = "MaterialiMx" Or control.Id = "Materialiread" _
        Or control.Id = "Lottix" Or control.Id = "LottiMx" Or control.Id = "Sottoclassix" Or control.Id = "Fornitorex" _
        Or control.Id = "FornitoreM" Or control.Id = "FornitoriL" Or control.Id = "Clientex" Or control.Id = "ClienteM" _
        Or control.Id = "Societax" Or control.Id = "SocietaM" Or control.Id = "SocietaL" _
        Or control.Id = "Gruppox" Or control.Id = "GruppoMx" Or control.Id = "Grupporead" _
        Or control.Id = "SottoGruppox" Or control.Id = "SottogruppoMx" Or control.Id = "Sottogrupporead" _
        Or control.Id = "Bpark_lottix" Or control.Id = "Cancella_collegamenti_B_Park-lotti" _
        Or control.Id = "ClientiL" Or control.Id = "Distintabasex" Or control.Id = "DistintabaseM" _
        Or control.Id = "Bparksx" Or control.Id = "BparksMx" Or control.Id = "Bparksread" _
        Or control.Id = "Conduttori_lottix" Or control.Id = "modifica_collegamenti_Bpark_lotti" _
        Or control.Id = "Propertyx" Or control.Id = "PropertyL" Or control.Id = "Rdax" _
        Or control.Id = "Rdastampa" Or control.Id = "ModificaRda" Or control.Id = "visual_property" _
        Or control.Id = "Lavorix" Or control.Id = "LavoriL" Or control.Id = "Assicurazionix" Or control.Id = "Assastampa" _
        Or control.Id = "Assmodifica" Or control.Id = "Letturafotx" Or control.Id = "LetturafotM" _
        Or control.Id = "Letturafotalno" Or control.Id = "Letturafotcarpiano" Or control.Id = "Letturafotsettala" _
        Or control.Id = "Letturafotmag5a" Or control.Id = "Letturafotlaica3" Then
            enabled = True
        End If
    End If

    mi riattiva i pulsanti.

    La mia richiesta era se fosse possibile spegnere tutti i pulsanti contemporaneamente e non uno a uno. Oppure un metodo che non mi costringa ad inserire ogni volta che inserisco un pulsante nuovo ad aggiornare le istruzioni di cui sopra.

    Inoltre non mi e' chiaro il passaggio da VBA ad XML e cioè quando parte l'istruzione objRibbon.Invalidate come fa il programma a chiamare la procedura  Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled). 

    Per Alex: ho fatto confusione sul tuo suggerimento riguarda i link. Riguardando meglio forse ho trovato ciò che volevi dire. Intanto ti ringrazio poi ti informerò (sull'altro post) se mi è riuscito.

    Grazie a tutti ancora per la pazienza finora dimostrata.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Uhm…

    In italiano:

    Crei la variabile blocco boolean

    Ribbon button materialix

     Se blocco=false then fai quello che devi fare e imposta blocco a true…

    Se provi il ribbon lottix

     Se blocco= false bla bla… come sopra

    Ma stavolta trova true e quindi non esegue il codice (equivalente a disabled).

    Finito quello che devi fare con materialix setti blocco a false…

    Così eviti pure di premere più volte lo stesso ribbon…

    Fermo restando il consiglio di alex. Questo modus operandi vale per qualsiasi controllo.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Ciao a tutti,

    ho risolto in questo modo. Carico un vettore con i numi dei pulsanti e faccio un controllo sui vettori.

    Mentre scrivo ho pensato ad una ulteriore modifica e cioè caricare il file di caricamento del vettore nell autoexec in modo da non doverlo leggere nuovamente ogni volta che si preme un pulsante della Ribbon

    La procedura è: 

    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)
    Dim pulsanti() As Variant
    Dim contatorei As Byte
    pulsanti = Array("Materialix", "MaterialiMx", "Materialiread", "Lottix", "LottiMx", "Sottoclassix", "Fornitorex", _
           "FornitoreM", "FornitoriL", "Clientex", "ClienteM", "Societax", "SocietaM", "SocietaL", _
           "Gruppox", "GruppoMx", "Grupporead", "SottoGruppox", "SottogruppoMx", "Sottogrupporead", _
           "Bpark_lottix", "Cancella_collegamenti_B_Park-lotti", "ClientiL", "Distintabasex", "DistintabaseM", _
           "Bparksx", "BparksMx", "Bparksread", "Conduttori_lottix", "modifica_collegamenti_Bpark_lotti", _
           "Propertyx", "PropertyL", "Rdax", "Rdastampa", "ModificaRda", "visual_property", _
           "Lavorix", "LavoriL", "Assicurazionix", "Assastampa", "Assmodifica", "Letturafotx", "LetturafotM", _
           "Letturafotalno", "Letturafotcarpiano", "Letturafotsettala", "Letturafotmag5a", "Letturafotlaica3")
           
    If control.Id = "chiusura" Then
       visibilita = 0
    End If
    For contatorei = 0 To 47
       If visibilita = 1 Then
           If control.Id = pulsanti(contatorei) Then enabled = False
       End If
       If visibilita = 0 Then
           If control.Id = pulsanti(contatorei) Then enabled = True
       End If
    Next contatorei
    End Sub 

    Grazie a tutti

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Scusa ma quello che fai è decisamente “orribile”… e dimostra che non hai ben chiaro come funzionano i ribbon.

    Se configuri nel Ribbon Code in HTML per ogni controllo che deve essere gestito, la chiamata a ControlEnabled, quel codice viene ripetuto per tutti i controlli… è veramente fuori da ogni logica.

    Oltretutto quel ciclo ne è la prova…, purtroppo non vedendo l'HTML non si capisce ma penso potresti riassumere il tutto così:

    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)
           
    	enabled =control.Id = "chiusura"
    
    End Sub 

    Quando fai l'Invalidate si aggiorna.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Ciao a tutti,

    ho provato a inserire l'istruzione che mi ha scritto (ALex) ma non mi funziona. 

    Per meglio far comprendere la logica del programma riporto l'XML, la procedura “enebled” e le procedure delle due form associate ai pulsanti.

    Ho semplificato l'XML che apre due gruppi e ogni gruppo ha un solo pulsante per fare le prove: 

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="fncRibbon" loadImage="fncLoadImage"> 
    <ribbon startFromScratch="false">
    <tabs>
                   <tab id="Materiali" label="Anagrafica">
                                  <group id="Group6" label="BUSINESS PARKS">
                                                <button id="Bparksx"
                                                               label="Inserisci"
                                                               tag="A0000_B_Park"
                                                               onAction="ribOpenFormbpark"
                                                               getEnabled="ControlEnabled"
                                                               size="large"
                                                               image="albero.png"
                                                               supertip="Inserisci business Parks" />
                                  </group>
                                  <group id="Group7" label="GRUPPO">
                                                <button id="Gruppox"
                                                               label="Inserisci"
                                                               tag="E0000_Property_gruppo"
                                                               onAction="ribOpenFormgruppo"
                                                               getEnabled="ControlEnabled"
                                                               size="large"
                                                               image="gruppo.png"
                                                               supertip="Inserisci gruppo" />
                                  </group>
                   </tab>
    </tabs>
    </ribbon>
    </customUI>

    Le istruzione onActionvaproni i due form (a seconda del pulsante premuto) che sono “RibOpenFormbpark” e ribOpenFormgruppo.

    Quando devo poi disabilitare i due pulsanti riesco solo a farlo agendo sui  singoli controlli. La variabile visibilita (variabile pubblica di tipo byte non boolean assume 0 oppure 1 a rispettivamente per  enable=true e enable=false.

    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled)
    Dim pulsanti() As Variant
    Dim contatorei As Byte
    pulsanti = Array("Gruppox", "Bparksx")
     For contatorei = 0 To 1
        If visibilita = 1 Then
            If control.Id = pulsanti(contatorei) Then enabled = False
        End If
        If visibilita = 0 Then
            If control.Id = pulsanti(contatorei) Then enabled = True
        End If
    Next contatorei
    End Sub

    Gli eventi assoiciati ai due form  sono semplici e sono:

    RibOpenFormbpark:

    Private Sub Comando42a_Click()
    Dim z As String
    z = "SELECT ID_BPark,Nome,Localita,Indirizzo,Numeri_lotto FROM A0000_B_Park WHERE ID_BPark = " & txt_Carica_bp.Value & ";"
    Form_A0000_B_Park.RecordSource = z
    Form_A0000_B_Park.Requery
    z = txt_Carica_bp
    txt_Carica_bp = ""
    If CasellaControllo43a.Value = -1 Then
      DoCmd.SetWarnings False
      DoCmd.RunSQL "INSERT INTO A0000_B_Park SELECT A0000_B_Park.* FROM A0000_B_Park WHERE (([A0000_B_Park]![ID_BPark]= " & z & "));"
      
      DoCmd.RunCommand acCmdDeleteRecord
      
      DoCmd.SetWarnings True
    End If
    End Sub
    Private Sub Comandobp_Click()
    Dim stringaSQL2 As String
    If IsNull(Me.txt_Ricerca_bp) = False Then variabile = "*" & Me.txt_Ricerca_bp & "*" Else variabile = ""
    stringaSQL2 = "SELECT A0000_B_Park.[ID_BPark], A0000_B_Park.[Nome], A0000_B_Park.[Localita], A0000_B_Park.[Indirizzo] FROM A0000_B_Park WHERE A0000_B_Park.[Nome] LiKE '" & variabile & "';"
    Lista1.ColumnCount = 4
    Lista1.ColumnWidths = "0,5in.;2in.;3in.;2in."
    Lista1.RowSourceType = "Table/Query"
    Lista1.RowSource = stringaSQL2
    End Sub
    Private Sub Form_Load()
    visibilita = 1
       objRibbon.Invalidate
    End Sub
    Private Sub Form_Close()
       visibilita = 0
       objRibbon.Invalidate
    End Sub

    mentre l' altro pulsante e'

     ribOpenFormgruppo:

    Private Sub Form_Load()
    visibilita = 1
       objRibbon.Invalidate
    End Sub
    Private Sub Form_Close()
       visibilita = 0
       objRibbon.Invalidate
    End Sub
    Private Sub Comando42a_Click()
    Dim z As String
    z = "SELECT ID_Gruppo, Gruppo FROM E0000_Property_gruppo WHERE ID_Gruppo = " & txt_Carica_bp.Value & ";"
    Form_E0000_Property_gruppo.RecordSource = z
    Form_E0000_Property_gruppo.Requery
    z = txt_Carica_bp
    txt_Carica_bp = ""
    If CasellaControllo43a.Value = -1 Then
      DoCmd.SetWarnings False
      DoCmd.RunSQL "INSERT INTO E0000_Property_gruppo SELECT E0000_Property_gruppo.* FROM E0000_Property_gruppo WHERE (([E0000_Property_gruppo]![ID_Gruppo]= " & z & "));"
      
      DoCmd.RunCommand acCmdDeleteRecord
      
      DoCmd.SetWarnings True
    End If
    End Sub
    Private Sub Comandobp_Click()
    Dim stringaSQL2 As String
    If IsNull(Me.txt_Ricerca_bp) = False Then variabile = "*" & Me.txt_Ricerca_bp & "*" Else variabile = ""
    stringaSQL2 = "SELECT E0000_Property_gruppo.[ID_Gruppo], E0000_Property_gruppo.[Gruppo] FROM E0000_Property_gruppo WHERE E0000_Property_gruppo.[Gruppo] LiKE '" & variabile & "';"
    Lista1.ColumnCount = 2
    Lista1.ColumnWidths = "0,5in.;2in."
    Lista1.RowSourceType = "Table/Query"
    Lista1.RowSource = stringaSQL2
    End Sub
    

    Le istruzioni associate agli eventi load e close fanno cambiare la variabile visibilita.  

    Il comando che mi ha suggerito Alex non riesco a farlo funzionare anche perchè la variabile era visibilita (byte) e non “chiusura” (string). 

    Attenzione la mia non è una critica era solo per vedere se ne vengo a capo.

    Grazie ancora per l'attenzione

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Chi ha scritto questa cosa…?

    If control.Id = "chiusura" Then
       visibilita = 0
    End If

    L'assunto diventa che di default la variabile vale 1 non avendo gli elementi per seguire, e non è polemica ma è tutto molto azigogolato, per me almeno, di conseguenza fatico a seguire.

    Lascio a chi ha più pazienza.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Ricominciamo…

    carichi la ribbon da un xml…

    suppongo che i pulsanti cambino di volta in volta mantenendo lo stesso nome (??) altrimenti non mi spiego il senso di caricarli a runtime da xml.

    nel frattempo correggimi se sbaglio, questo è quello che ho capito io…

    08/06/2024 - tatixtatix6 ha scritto:


    Public Sub ControlEnabled(control As IRibbonControl, ByRef enabled) 
    If control.Id = "chiusura" Then visibilita = 0 End If 
    If visibilita = 1 Then 
      If control.Id = "Materialix" Or control.Id = "MaterialiMx" Or control.Id = "Materialiread" _ 
         Or control.Id = "Lottix" Or control.Id = "LottiMx" Or control.Id = "Sottoclassix" 
         Or control.Id = "Fornitorex" _ Or control.Id = "FornitoreM" Or control.Id = "FornitoriL" 
         Or control.Id = "Clientex" Or control.Id = "ClienteM" _ Or control.Id = "Societax" 
         Or control.Id = "SocietaM" Or control.Id = "SocietaL" _ Or control.Id = "Gruppox" 
         Or control.Id = "GruppoMx" Or control.Id = "Grupporead" _ Or control.Id = "SottoGruppox" 
         Or control.Id = "SottogruppoMx" Or control.Id = "Sottogrupporead" _ Or control.Id = "Bpark_lottix" 
         Or control.Id = "Cancella_collegamenti_B_Park-lotti" _ Or control.Id = "ClientiL" 
         Or control.Id = "Distintabasex" Or control.Id = "DistintabaseM" _ Or control.Id = "Bparksx" 
         Or control.Id = "BparksMx" Or control.Id = "Bparksread" _ Or control.Id = "Conduttori_lottix" 
         Or control.Id = "modifica_collegamenti_Bpark_lotti" _ Or control.Id = "Propertyx" 
         Or control.Id = "PropertyL" Or control.Id = "Rdax" _ Or control.Id = "Rdastampa" 
         Or control.Id = "ModificaRda" Or control.Id = "visual_property" _ Or control.Id = "Lavorix" 
         Or control.Id = "LavoriL" Or control.Id = "Assicurazionix" Or control.Id = "Assastampa" _ 
         Or control.Id = "Assmodifica" Or control.Id = "Letturafotx" Or control.Id = "LetturafotM" _ 
         Or control.Id = "Letturafotalno" Or control.Id = "Letturafotcarpiano" Or control.Id = "Letturafotsettala" _ 
         Or control.Id = "Letturafotmag5a" Or control.Id = "Letturafotlaica3" 
         Then enabled = False 
      End If 
    End If

    42 pulsanti..

    domande: importi 42 pulsanti da xml?   come attribuisci il codice da eseguire per ogni pulsante?

    partendo dalla prima if… chiusura è il 43mo pulsante? (if …chiusura… era l'ultimo riferimento che ha scritto alex)

    hai la barra dei pulsanti e se premi chiusura abilita o disabilita le ribbon? (avrebbe piu' senso il testo da apertura a chiusura e viceversa)

    apri un subform, per esempio col pulsante materalix e disabiliti la ribbon per evitare che se visualizzi materialix si possa premere clientex giusto?

    torno alla seconda domanda: come attribuisci il codice che apre il subform?

    per il momento mi fermo e aspetto conferme o smentite.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    11/06/2024 - sihsandrea ha scritto:


    Ricominciamo…

    carichi la ribbon da un xml…

    suppongo che i pulsanti cambino di volta in volta mantenendo lo stesso nome (??) altrimenti non mi spiego il senso di caricarli a runtime da xml.

    nel frattempo correggimi se sbaglio, questo è quello che ho capito io…

    ….

    42 pulsanti..

    domande: importi 42 pulsanti da xml?   come attribuisci il codice da eseguire per ogni pulsante?

    partendo dalla prima if… chiusura è il 43mo pulsante? (if …chiusura… era l'ultimo riferimento che ha scritto alex)

    hai la barra dei pulsanti e se premi chiusura abilita o disabilita le ribbon? (avrebbe piu' senso il testo da apertura a chiusura e viceversa)

    apri un subform, per esempio col pulsante materalix e disabiliti la ribbon per evitare che se visualizzi materialix si possa premere clientex giusto?

    torno alla seconda domanda: come attribuisci il codice che apre il subform?

    per il momento mi fermo e aspetto conferme o smentite.

    Andrea, se sai come funziona il Ribbon, è semplie verificare, ha pubblicato il codice XML:

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="fncRibbon" loadImage="fncLoadImage"> 
    <ribbon startFromScratch="false">
    <tabs>
                   <tab id="Materiali" label="Anagrafica">
                                  <group id="Group6" label="BUSINESS PARKS">
                                                <button id="Bparksx"
                                                               label="Inserisci"
                                                               tag="A0000_B_Park"
                                                               onAction="ribOpenFormbpark"
                                                               getEnabled="ControlEnabled"
                                                               size="large"
                                                               image="albero.png"
                                                               supertip="Inserisci business Parks" />
                                  </group>
                                  <group id="Group7" label="GRUPPO">
                                                <button id="Gruppox"
                                                               label="Inserisci"
                                                               tag="E0000_Property_gruppo"
                                                               onAction="ribOpenFormgruppo"
                                                               getEnabled="ControlEnabled"
                                                               size="large"
                                                               image="gruppo.png"
                                                               supertip="Inserisci gruppo" />
                                  </group>
                   </tab>
    </tabs>
    </ribbon>
    </customUI>

    Come vedi in questo stralcio ci sono solo 2 Controlli in 2 Gruppi, in ogni controllo trovi le opzioni, nel nostro caso devi fare attenzione a questo punto che è correttamente inserito in ogni controllo creato:

    getEnabled="ControlEnabled"

    Questo indica che lo stato di ENABLED del controllo è condizionato dalla funzione di CALLBACK [ControlEnabled] che ha 2 parametri, Controllo e Stato.

    Quando viene chiamata la funzione e come…?
    Ad ogni Invalidate, si ha l'aggiornamento, ed ogni controllo la chiama, per questo non ha senso quello che viene scritto, ora mi taccio e passo.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Grazie alex, non avevo notato…

    devi intercettare 

    onAction="ribOpenFormgruppo" 

    verificandone lo stato visibilita = 1

    l'apertura del form (o l'azione del ribbon) deve essere subordinata allo stato della variabile.

    devi solo aggiungere lo styato if visibilita=1 then prima dell'azione da svolgere.

    era quello che cercavo di spiegare…

    09/06/2024 - sihsandrea ha scritto:


    Uhm…

    In italiano:

    Crei la variabile blocco boolean

    Ribbon button materialix

     Se blocco=false then fai quello che devi fare e imposta blocco a true…

    Se provi il ribbon lottix

     Se blocco= false bla bla… come sopra

    Ma stavolta trova true e quindi non esegue il codice (equivalente a disabled).

    Finito quello che devi fare con materialix setti blocco a false…

    Così eviti pure di premere più volte lo stesso ribbon…

    Fermo restando il consiglio di alex. Questo modus operandi vale per qualsiasi controllo.

    la chiusura setta la variabile a 0 e da via libera alle azioni dei pulsanti senza intervenire sulla ribbon che resta sempre enabled.

  • Re: Abilitare o disabilitare pulsanti di una ribbon

    Buongiorno a tutti in particolare ad Alex e Sihssadrea,

    se non ho capito male Andrea dà un suggerimento che è questo:

    quando hai aperto un form passa la visibilita=1 e se si preme un altro tasto non fai aprire il form fin quando la visibilita=0. In questo modo si evita di spegnere i pulsanti. Quindi l'utente puo' premere un pulsante ma questo non gli ritorna nulla se visibilita=1. Questo suggerimento è ottimo a cui non avevo pensato. 

    La mia programmazione era di logica diversa, una volta premuto il pulsante disabilita tutti i pulsanti fin quando il form non viene chiuso. Sicuramente i suggerimenti  che mi avete fornito sono migliori.

    Grazie

Devi accedere o registrarti per scrivere nel forum
20 risposte