Creazione di uno smart tag per word in Visual Basic .Net (parte II)
Pagina 2 di 2
Inserimento della classe Action:
La classe Action permette di eseguire la varie azioni dello smart tag. Quindi dobbiamo inserire una nuova classe, quindi facciamo click con il pulsante destro del mouse, sul nome del progetto, e selezioniamo la voce nuova classe. Come nome gli assegniamo il valore Action.
Anche in questa classe bisogna importare il namespace smart tag e interoperabilità.
Quindi in alto sopra ad ogni scritta scriviamo il seguente codice:
Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop.SmartTag
Anche per questa classe dobbiamo assegnare una guid, come visto in precedenza per la classe recognizer, quindi la procedura sarà la medisima
Il codice dev’essere simile quello riportato qui di seguito.
< span> manuele.Action"), _<>
GuidAttribute("0C832FB2-717D-443f-AD90-DBFE42072FFE"), _
ComVisible(True)> _
Public Class Action
La classe Action, deve implementare l’interfaccia ISmartTagAction
quindi scriveremo sotto a class Action il seguente codice:
Public Class Action
Implements ISmartTagAction
Anche qui dopo la scritta ismarttagaction digitando il pulsante della tastiera invio verranno automaticamente riportale le varie prorpietà e metodi di tale interfaccia.
Proprietà Desc:
Questa proprietà ha il compito di impostare la descrizione della classe action.
Public ReadOnly Property Desc(ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.Desc
Get
'descrizione della classe action
Return "Descrizione della classe action"
End Get
End Property
Metodo invokeverb
Tale metodo ha il compito di eseguire l’azione sulle varie voci che vengono visualizzati durante l’apertura dello smart tag (figura 1), per esempio se noi abbiamo due voci una con la scritta email e l’altra con la scritta sito, a seconda della voce che verrà selezionata eseguirà una determinata azione.
Public Sub InvokeVerb(ByVal VerbID As Integer, ByVal ApplicationName As String, ByVal Target As Object, ByVal Properties As Microsoft.Office.Interop.SmartTag.ISmartTagProperties, ByVal Text As String, ByVal Xml As String) Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.InvokeVerb
'verifico che voce è stata selezionata
Select Case VerbID
Case 1 'email
System.Diagnostics.Process.Start("mailto:emanuelemattei@aruba.it")
Case 2 'sito
System.Diagnostics.Process.Start("http://www.shareoffice.it")
End Select
End Sub
La proprietà name
imposta il nome per la classe action.
Public ReadOnly Property Name(ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.Name
Get
'imposto il nome per la classe action
Return "Nome Action"
End Get
End Property
Proprietà ProgId
Questa proprietà imposta l’id della classe action da notare che tale id è il nome della classe preceduto dal nome del progetto.
Public ReadOnly Property ProgId() As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.ProgId
Get
'ritorna l'id della classe action
Return "SmartTagEmanuele.Action"
End Get
End Property
La proprietà SmartTagCaption:
Questa proprietà ha il compito di visualizzare una descrizione nella finestra dei smart tag(figura 5), questo testo precede il nome di tale smart tag.
Public ReadOnly Property SmartTagCaption(ByVal SmartTagID As Integer, ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.SmartTagCaption
Get
'il valore che verrà visualizzato nella finestra smart tag
Return "Esempio di smartTag"
End Get
End Property
La proprietà smarttagcount
Questa proprietà ha il compito di indicare il numero dei smart tag. Nel nostro caso uno
Public ReadOnly Property SmartTagCount() As Integer Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.SmartTagCount
Get
' il numero dei smart tag
Return 1
End Get
End Property
La proprietà SmartTagName
Questa proprietà ha il compito di visualizzare il nome dello smart tag.
Public ReadOnly Property SmartTagName(ByVal SmartTagID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.SmartTagName
Get
'il nome dello smart tag che si vuole eseguire.
Return "urn:esempio-smarttag#SmartTagEmanuele"
End Get
End Property
La proprietà VerbCaptionFromId
Questa proprietà ha il compito di visualizzare le varie voci dello smart tag.
Tramite l’argomento VerbId indica il numero di indice di tali voci.
Public ReadOnly Property VerbCaptionFromID(ByVal VerbID As Integer, ByVal ApplicationName As String, ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.VerbCaptionFromID
Get
Select Case VerbID
Case 1 'visualizza il testo delle due caption
Return "Email"
Case 2
Return "Sito"
End Select
End Get
End Property
La proprietà VerbCount
Essa ritorna il numero delle voci.
Public ReadOnly Property VerbCount(ByVal SmartTagName As String) As Integer Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.VerbCount
Get
'ritorna il numero delle voci
If (SmartTagName.Equals("urn:esempio-smarttag#SmartTagEmanuele")) Then
Return 2
End If
End Get
End Property
La proprietà VerbId
Questa proprietà ritorna l’indice della voce selezionata
Public ReadOnly Property VerbID(ByVal SmartTagName As String, ByVal VerbIndex As Integer) As Integer Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.VerbID
Get
'ritorna l'indice della voce
Return VerbIndex
End Get
End Property
La proprietà VerbNameFromid
Questa proprietà ha il compito di assegnare ad ogni singolo indice (voce di menu) un nome indentificativo.
Public ReadOnly Property VerbNameFromID(ByVal VerbID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagAction.VerbNameFromID
Get
'imposto i vari id
Select Case VerbID
Case 1
Return "sendemail"
Case 2
Return "site"
End Select
End Get
End Property
Compilazione del progetto
Dopo aver creato le varie classi, dobbiamo impostare una proprietà del progetto ossia la voce “Registra per interoperabilità Com”.
Facciamo click con il pulsante destro del mouse sul nome del progetto, scegliamo proprietà, verrà aperta una finestra(figura 6), scegliamo la voce proprietà di configurazione e selezionamo la voce Generazione. Mettiamo la spunta alla voce “Registra per interoperabilità com” Come mostrato nella figura qui di seguito.

Figura 6
A questo punto facciamo click sul pulsante ok.
Creazione delle chiavi di registro
Andiamo nel registro del siste
Hkey_current_UsersSoftwareMicrosoftofficecommonsmart tagactions
a questa chiave inseriamo una nuova chiave con il codice della nostra guid della classe Action ossia
{0C832FB2-717D-443f-AD90-DBFE42072FFE}
A tale chiave inseriamo due valori stringa uno con il nome Assembly che avrà il seguente valore
SmartTagEmanuele, Version=1.0.1985.25679, Culture=neutral, PublicKeyToken=null
e l’altro Type con il seguente valore:
SmartTagEmanuele.Action
Come mostrato alla figura 7

Figura 7
Cerchiamo la chiave la Recognizers sotto alla voce smart tag, e si crea una nuova chiave con il valore della guid della classe recognizers ossia
{5CFC6CE8-6A70-4b68-9500-8480DBA013DA}
Anche questa chiave avrà i due valori stringa Assembly e Type.
Assembly:
SmartTagEmanuele, Version=1.0.1985.25679, Culture=neutral, PublicKeyToken=null
Type:
SmartTagEmanuele.Recognizer
Come mostrato in figura 8

Figura 8 - http://www.blogema.altervista.org/smarttagvbnet8.jpg
Chiudiamo il registro del sistema e compiliamo il nostro progetto.
Apriamo word, selezioniamo la voce opzioni di correzione automatica, situato nel menu strumenti, nella finestra che viene aperta, selezioniamo la pagina smart tag.
Mettiamo la spunta alla voce “contrassegna testo con smart tag” e la spunta anche alla voce mostra pulsanti azioni smart tag. A questo punto facciamo click su ok e chiudiamo il programma Word.
Apriamo word e digitiamo la parola “Emanuele” o quella che avete scelto voi, vedrete apparire uno smart tag su tale parole. Assicurarsi che il vostro smart tag venga visualizzato nella finestra dei smart tag (figura 5).
I possibile errori possono essere i seguenti:
Nomi errati della classe o del progetto.
La proprietà smarttagname deve iniziare con il seguente valore “urn:”
Assicurarsi di aver inserito il codice guid nel registro di sistema con le parentesi graffe all’inizio ed alla fine di tale valore.
Assicurarsi di aver inserito i valori stringa assembley e type per tutte e due le voci (recognizers e Action) e con i valori corretti (nome del vostro progetto)
Conclusioni
In questo articolo abbiamo visto come creare uno smart tag molto più complesso di quello della lezione precedente.
Creare uno smart tag in Visual Basic.Net non è facile, ma con un’accurata analisi ed attenzione al codice, si possono ottenere risultati molto sorprendenti.
- Articolo precedente Creazione di uno smart tag per word in Visual Basic .Net (parte I)
- Articolo successivo Word Vba: comprimere e decomprimere i file in word con il programma Winzip