La creazione di un progetto da zero in Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Creare un Add-In (Quinta parte)

Nel corso della quarta parte di questa serie di articoli si è visto come aggiungere una voce al menu Strumenti del menu principale di Visual Basic ma non si è ancora visto come gestire tale evento.
Premettiamo che in ogni caso è possibile scegliere in quale menu a discesa inserire la voce che indica l'aggiunta. Noi abbiamo inserito ad esempio una voce denominata 'Ridimensiona' ed un'icona nel menu Strumenti, riconosciuto da Visual Basic col nome di 'Tools' ma è certamente possibile compiere la medesima operazione nel menu File (riconosciuto da Visual Basic come 'File'), nel menu Modifica ('Edit') e così via...
In quest'ultimo caso basterà sostituire nel codice di OnConnection la parola 'Tools' con 'Edit' come riportato sotto:

Private Sub IDTExtensibility_OnConnection(ByVal VBInst As Object, ByVal ConnectMode As _
VBIDE.vbext_ConnectMode, ByVal AddInInst As VBIDE.AddIn, custom() As Variant)
On Error GoTo ErroreGenerico
MsgBox "L'aggiunta è stata caricata con successo!"
Set VBI = VBInst
Set mcbMenuCommandBarCtrl = VBI.CommandBars("Edit").Controls.Add(before:=3)
mcbMenuCommandBarCtrl.BeginGroup = True
VBI.CommandBars("Edit").Controls(4).BeginGroup = True
mcbMenuCommandBarCtrl.Caption = "Ridimensiona"
Clipboard.SetData LoadPicture("C:\Windows\bollicine.bmp")
mcbMenuCommandBarCtrl.PasteFace
Set MenuHandler = VBI.Events.CommandBarEvents (mcbMenuCommandBarCtrl)
ErroreGenerico:
MsgBox Err.Description
Exit Sub
End Sub

E' altresì possibile integrare tale operazione decidendo di inserire una semplice icona (ad esempio la bitmap "bollicine.bmp" che abbiamo considerato nell'articolo scorso) nella toolbar di Visual Basic.
L'effetto di questa operazione potrebbe essere simile a quello riportato in figura:


A tale scopo dovremo dare un'altro colpetto di codice al modulo di classe, con l'avvertenza di non riempire menu e toolbars con icone e voci personalizzate in quanto sarebbe una cosa poco gradita all'utente...
Prima di cominciare riassumuamo brevemente quello che andremo a fare: prima di tutto inseriremo la bitmap "bollicine.bmp" nella toolbar di Visual Basic, poi gestiremo gli eventi della pressione del mouse su tale icona e sulla voce del menu Strumenti 'Ridimensiona'.
Cominciamo dal principio. Abbiamo indicato in precedenza MenuHandler come la serie di eventi collegati al menu principale di Visual Basic. Il tutto nella linea di codice:

Set MenuHandler = VBI.Events.CommandBarEvents (mcbMenuCommandBarCtrl)

Così ad esempio l'evento MenuHandler_Click corrisponde alla pressione di un tasto del mouse su una voce del menu (ad esempio su Salva nel menu File).
Adesso consideriamo ad esempio MenuHandler2 che raggrupperà tutti gli eventi della toolbar di Visual Basic.
Nella sezione generale del modulo di classe scriviamo allora:

Private WithEvents MenuHandler2 As CommandBarEvents

Poi definiamo un oggetto del gruppo CommandBar:

Private mcbMenuCommandBar As Office.CommandBarControl

Ora nell'evento OnConnection, subito prima dell'etichetta di linea 'Errore Generico:' inseriamo una linea che ci serve a determinare se la toolbar di Visual Basic è stata interamente caricata. Se così fosse potremmo procedere all'inserimento della bitmap:

If VBI.CommandBars("Standard").Visible = True Then
...
End IF

Al posto dei puntini gestiamo l'inserimento dell'immagine prima di tutto aggiungendo un nuovo pulsante (per ora vuoto) nella casella degli strumenti. Aggiungere qui significa inserirlo in ultima posizione ossia all'estrema destra della toolbar di Visual Basic:

Set mcbMenuCommandBar = VBI.CommandBars("Standard").Controls.Add(1, , , VBI.CommandBars("Standard") _
.Controls.Count)

dove 'Standard' è il riferimento alla toolbar standard (appunto) di Visual Basic.
Ora riprendiamo una tecnica già analizzata per inserire la voce 'Ridimensiona' nel menu 'Strumenti': copiamo negli Appunti (o nella ClipBoard) l'immagine bitmap ed incolliamola successivamente sul pulsante con il metodo PasteFace di cui è dotato un controllo CommandBar.
Copiamo negli Appunti l'immagine:

Clipboard.SetData LoadPicture("C:\Windows\bollicine.bmp")

ed incolliamola sul pulsante:

mcbMenuCommandBar.PasteFace

Per finire settiamo il testo che comparirà in un riquadro giallo (ToolTipText) una volta che si passa il puntatore sull'icona e che definisce l'applicazione associata all'icona stessa:

mcbMenuCommandBar.Caption = "Ridimensiona"

Per concludere quindi questa prima parte e prima di trattare la gestione degli eventi dell' oggetto CommandBar indichiamo conMenuHandler2 la serie di eventi collegati alla barra strumenti standard di Visual Basic:

Set MenuHandler2 = VBI.Events.CommandBarEvents(mcbMenuCommandBar)

E come annunciato vediamo gli eventi click sulla voce di menu 'Ridimensiona' e click sull'icona bollicine della barra strumenti. Per gestire il primo caso è necessario introdurre l'evento MenuHandler_Click come già anticipato. All'interno di esso immettiamo il codice per visualizzare una finestra di messaggio che ci indichi dove abbiamo cliccato:

Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "Si è fatto clic sulla voce " & mcbMenuCommandBarCtrl.Caption
End Sub

Questo è il risultato:


Nel caso volessimo fare una cosa simile con l'icona, dovremmo inserire questo secondo evento:

Private Sub MenuHandler2_Click(ByVal CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "Si è fatto clic sull'icona"
End Sub

Com'è ormai consuetudine riassumiamo il codice completo fino a questo articolo:

Implements IDTExtensibility
Public VBI As VBIDE.VBE
Private mcbMenuCommandBarCtrl As Office.CommandBarControl
Private mcbMenuCommandBar As Office.CommandBarControl
Private WithEvents MenuHandler As CommandBarEvents
Private WithEvents MenuHandler2 As CommandBarEvents
Private Sub IDTExtensibility_OnConnection(ByVal VBInst As Object, ByVal ConnectMode As _
VBIDE.vbext_ConnectMode, ByVal AddInInst As VBIDE.AddIn, custom() As Variant)
On Error GoTo ErroreGenerico
MsgBox "L'aggiunta è stata caricata con successo!"
Set VBI = VBInst
Set mcbMenuCommandBarCtrl = VBI.CommandBars("Tools").Controls.Add(before:=3)
mcbMenuCommandBarCtrl.BeginGroup = True
VBI.CommandBars("Tools").Controls(4).BeginGroup = True
mcbMenuCommandBarCtrl.Caption = "Ridimensiona"
Clipboard.SetData LoadPicture("C:\Windows\bollicine.bmp")
mcbMenuCommandBarCtrl.PasteFace
Set MenuHandler = VBI.Events.CommandBarEvents (mcbMenuCommandBarCtrl)
If VBI.CommandBars("Standard").Visible = True Then
Set mcbMenuCommandBar = VBI.CommandBars("Standard").Controls.Add(1, , , VBI.CommandBars("Standard") _
.Controls.Count)
Clipboard.SetData LoadPicture("C:\Windows\bollicine.bmp")
mcbMenuCommandBar.PasteFace
mcbMenuCommandBar.Caption = "Ridimensiona"
Set MenuHandler2 = VBI.Events.CommandBarEvents(mcbMenuCommandBar) End IF ErroreGenerico:
MsgBox Err.Description
Exit Sub
End Sub
Private Sub IDTExtensibility_OnDisconnection(ByVal RemoveMode As VBIDE.vbext_DisconnectMode, _
custom() As Variant)
mcbMenuCommandBarCtrl.Delete
End Sub
Private Sub IDTExtensibility_OnStartupComplete (custom() As Variant)
'codice
End Sub
Private Sub IDTExtensibility_OnAddInsUpdate (custom() As Variant)
'codice
End Sub
Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "Si è fatto clic sulla voce " & mcbMenuCommandBarCtrl.Caption
End Sub
Private Sub MenuHandler2_Click(ByVal CommandBarControl As Object, handled As Boolean, _
CancelDefault As Boolean)
MsgBox "Si è fatto clic sull'icona"
End Sub

Nel prossimo articolo vedremo come eliminare l'icona una volta scaricata l'aggiunta. Comunque sarà eliminata automaticamente alla chiusura di Visual Basic o cliccando col tasto destro sul mouse su di essa, scegliendo 'Personalizza...' e 'Reimposta'.

Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it