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 (Seconda parte)

Riprendiamo il discorso interrotto riguardo la creazione delle aggiunte in Visual Basic. Eravamo rimasti al codice relativo all'aggiornamento del file 'VBAddIn.INI' che contiene la lista della aggiunte disponibili, indicando in più il loro stato all'avvio di Visual Basic (caricate ha il valore 1, non caricate ha il valore 0). Si può aprire senza paura di provocare danni (magari prima copiandolo su una directory diversa da Windows/System) il file INI utilizzando il Blocco Note o un qualsiasi editor di testo.
Il codice che avevamo preso in considerazione corrisponde a quello indicato qui sotto:

Declare Function WritePrivateProfileString& Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$)
Sub AddToINI()
Dim rc As Long
rc = WritePrivateProfileString("Add-Ins32", "Ridimensiona.AddInClass", "0", "VBADDIN.INI")
MsgBox "L'aggiunta viene ora immessa nel file VBADDIN.INI."
End Sub

Nel corso dell'articolo che apriva questa serie sono state omesse un po' di informazioni riguardo la scrittura e la modifica di VBAddIn.INI attraverso il codice appena riportato.
Come si ricorderà dalla lezione sui files INI, il primo parametro che è stato assegnato alla funzione WritePrivateProfileString che ha lo scopo di scrivere dati su un file di tipo INI, ossia "Add-Ins32" corrisponde alla sezione Add-Ins32 del file (che è unica in questo caso). Riportando il testo che appariva nel succitato articolo "...Sezione è il nome incluso nella parentesi..." ad esempio "...[GENERALE]) che raggruppa una serie di valori e di chiavi.
Rappresenta, semplificando molto il concetto, una sorta di titolo del paragrafo."
Il parametro "Ridimensiona.AddInClass" rappresenta invece il nome dell'aggiunta, che nel nostro caso abbiamo già denominato Ridimensiona. Questo parametro rappresenterà la Chiave della Sezione "Add-Ins32". Riprendendo la definizione di Chiave si ricorderà che "...Chiave è una stringa univoca, almeno all'interno di ogni singola sezione, ossia continuando il nostro paragone semplificato, all'interno di ogni paragrafo. La chiave è sempre seguita dal segno "=" e da un valore."
Il valore 0 rappresenta invece lo stato dell'aggiunta all'avvio, ossia come già accennato all'inizio dell'articolo, scaricato all'avvio di Visual Basic. Un valore pari ad 1 corrisponde viceversa allo stato caricato all'avvio di Visual Basic.
L'ultimo parametro della WritePrivateProfileString indica infine su quale file di tipo INI apportare tutte le modifiche.
Adesso che abbiamo terminato la discussione dell'aggiornamento di VBAddIn.INI, riprendiamo lo sviluppo dell'aggiunta.
Eravamo rimasti al modulo importato manualmente attraverso la procedura descritta nell'articolo precedente. Adesso dovremo fare uso di un modulo di classe per cui, nel caso non sia stato aperto all'avvio del nuovo progetto DLL ActiveX, aggiungere un modulo di classe.
La struttura di base del progetto che andremo a sviluppare deve rispondere al tipo indicato nella figura qui sotto:


dove naturalmente Module1 rappresenta il modulo di codice che abbiamo aperto nell'articolo precedente e dove abbiamo scritto il codice per l'aggiornamento del file VBAddIn.INI e Class1 è il modulo di classe che dovrebbe essere stato attivato automaticamente all'apertura del progetto DLL ActiveX.
E' importante sincerarsi che Class1, che possiamo rinominare a nostro piacimento, deve avere la proprietà Instancing impostata su "5 MultiUse" proprio come riporta la figura sottostante:


Dopo che il file INI è stato aggiornato con la nuova aggiunta è possibile collegarla all'IDE di Visual Basic, ossia renderla integrata all'ambiente di sviluppo di Visual Basic.
Lavoriamo quindi all'interno del modulo di classe.
Dovremo innanzitutto inserire l'istruzione che specifichi l'interfaccia che verrà implementata nel modulo di classe in cui compare.
Come riporta MSDN Library 98 "...Un'interfaccia è un insieme di prototipi che rappresentano i membri, ovvero i metodi e le proprietà, inclusi nell'interfaccia stessa.
In altri termini, l'interfaccia contiene solo le dichiarazioni delle routine che ne fanno parte.
Una classe fornisce l'implementazione di tutti i metodi e le proprietà di una o più interfacce.
Le classi forniscono il codice che viene utilizzato quando ciascuna funzione viene richiamata da un controller della classe. Tutte le classi implementano almeno un'interfaccia, che viene considerata l'interfaccia predefinita di tale classe. In Visual Basic, qualsiasi membro che non appartiene esplicitamente a un'interfaccia implementata appartiene implicitamente all'interfaccia predefinita...."
Allo scopo di aggiungere nel progetto un riferimento all'oggetto IDTExtensibility, inseriamo il codice seguente nella sezione generale del modulo di classe:

Implements IDTExtensibility

Inserire il codice appena visto all'interno del modulo di codice ritornerebbe infatti un errore del tipo:


L'oggetto (o meglio l'interfaccia) IDTExtensibility contiene i metodi richiamati da Visual Basic quando viene connessa un'aggiunta, ossia nel momento in cui un'aggiunta viene richiamata dalla finestra Gestione Aggiunte o automaticamente perchè impostata su "Caricata all'avvio", viene richiamata la routine di eventi IDTExtensibility_OnConnection di tale aggiunta.
Viceversa quando la si scollega, viene generato l'evento IDTExtensibility_OnDisconnection.
Ecco quindi spiegata la necessità dei riferimenti di cui si parlava nel corso dell'articolo precedente.
Preoccupiamoci innanzitutto di gestire l'evento IDTExtensibility_OnDisconnection (l'utente ha selezionato ed attivato l'aggiunta).
IDTExtensibility però contiene due ulteriori eventi: OnAddinsUpdate che viene generato nel momento in cui si modifica manualmente o automaticamente il file VBAddIn.INI e OnStartupComplete che invece viene generato al termine dell'avvio dell'IDE di Visual Basic.
Quelli appena presentati sono dunque eventi un po' speciali generati sì dall'utente ma sempre con Visual Basic come tramite.


E' l'utente infatti ad aprire una nuova sessione di Visual Basic ma naturalmente la nostra aggiunta non riconoscerà questa eventualità fintantochè l'IDE di Visual Basic non sarà completamente caricata. Allo stesso modo collegare e scollegare un'aggiunta comporta un operazione dell'utente su Visual Basic che si riflette sull'aggiunta solo al termine di essa.
Col prossimo articolo entreremo più nel dettaglio di alcune caratteristiche dello sviluppo di aggiunte e svilupperemo la base del codice di Ridimensiona.

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