Emanuele Mattei
a- a+

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 sistema tramite il comando regedit alla voce esegui situato nel menu di avvio di windows. Una volta aperto il registro di windows cerchiamo la seguente chiave

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)

 o quella che avete scelto voi, vedrete apparire uno smart tag su tale parole.

e viene aperta, selezioniamo la pagina a chiamata

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.

 

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Luca
Ti è piaciuto l'articolo?