Emanuele Mattei

Il Blog di Emanuele

My Links

Blog Stats

News

E-mail per eventuale contatto
E-mail






Supporta il blog offrendo una pizza o un caffè per informazioni fai click qui. Grazie :-)))




ClipArt del giorno:
Naviga attraverso più di 140.000 immagini e clip multimediali scaricabili gratuitamente, per arricchire i tuoi documenti Office.



E-mail per eventuale contatto
E-mail



Locations of visitors to this page



Le opere pubblicate in questo blog sono sotto la licenza Creative Commons. Attribuzione- No commerciale e no derivate.

Il libro che sto leggendo:






Settembre 2007 Dicembre 2007
Marzo 2008
Giugno 2008
Settembre 2008
Dicembre 2008


Pagina Hall Of Fame

Powered by  MyPagerank.Net

Categorie Articoli

Archivio

Categorie Post

Immagini

Sezione siti

Blog Amici

Office

Net

Siti Gratuiti

Siti vari

Tools

Elenco Siti

Il tempo a Roma

Programmi Gratuiti e Portatili

Articolo: Creazione di uno smart tag per word in Visual Basic .Net

Introduzione:

In questo articolo vedremo come creare uno smart tag per office 2003 in Visual Basic.Net 2003, tale smart tag avrà il compito di Visualizzare un sito o un inviare un email qualora su un documento Word viene scritta la parola Emanuele, come mostrato in figura 1 (se avete problemi nella visualizzazione delle immagini, andate nella categoria immagini, sezione smart tag vb.net)

Figura 1

La creazione di uno smarttag, comporta la creazione di due classi una chiamata Recognizer che avrà il compito di impostare le informazioni dello smart tag (nome, descrizione, ecc) e una chiamata Action che avrà il compito di eseguire determinate operazione (nel nostro caso aprire un sito o inviare un email).

Creazione di un progetto.

Avviamo Visual studio net 2003, si scelga nuovo progetto, nella finestra che viene aperta (figura 2)  scegliamo come tipo di progetto (parte sinistra)  Progetti di Visual basic, e nella parte modelli (parte di destra) libreria di classi, digitiamo un nome e scegliamo ok.

Figura 2 - http://www.blogema.altervista.org/smarttagvbnet2.jpg

Importazione

Verrà creata automatica una classe che si chiama class1.vb.

Rinominiamo sia il file che la classe con il seguente nome: Recognizer ed il nome del file Recognizer.vb.

A questo punto dobbiamo importare il riferimento smart tag versione 2.0, come mostrato nella figura successiva (figura 3)

Figura 3 - http://www.blogema.altervista.org/smarttagvbnet3.jpg

Per importare un riferimento in Visual Basic Net, bisogna selezionare la voce di menu Aggiungi riferimento, situato in progetti. Si aprirà una finestra, in essa scegliamo la voce Com, e selezioniamo la voce Microsoft Smart Tags 2.0 (office 2003, mentre 1.0 è per la versione office Xp).

Fatto ciò facciamo click sul pulsante seleziona e poi ok.

 

 

Stesura del codice

Dobbiamo importare due namespace, uno per la gestione dei smart tag e l’altro per la gestione dei file interoperabilità.

quindi in alto sopra della dicitura class scriviamo il seguente codice.

Imports Microsoft.Office.Interop.SmartTag

Imports System.Runtime.InteropServices

 

Fatto ciò bisogna creare un codice guid, esso ci permette di dare un riferimento alla dll che andremo a creare nel registro di sistema di windows.

Per assegnare un valore guid, bisogna fare click sulla voce di menù crea guid, situato in strumenti e nella finestra (figura 4) che viene aperta selezioniamo la quarta opzione ossia registry format facciamo click sul pulsante copia e poi sul pulsante esci.

Figura 4 - http://www.blogema.altervista.org/smarttagvbnet4.jpg

Il codice guid va messo nella classe guidattributes.

Come mostrato qui di seguito:

 manuele.Recognizer"), _

    GuidAttribute("5CFC6CE8-6A70-4b68-9500-8480DBA013DA"), _

    ComVisible(True)> _

Public Class Recognizer

 La classe deve implementare l’interfaccia ismarttagrecognizer, di seguito è riportato il codice di tale operazione.

    Implements ISmartTagRecognizer

 quando si digita il pulsante invio dopo la parola ismarttagrecognizer, verranno scritte in automatico alcune proprietà.

Le proprietà di Recognizer

Analizziamo qui di seguito le varie proprietà ed il metodo recognizer della classe recognizer.

 Proprietà Desc

Ha il compito di dare una descrizione alla classe Recognizer 

Public ReadOnly Property Desc(ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.Desc

        Get

            'descrizione della classe recognizer

            Return "Descrizione Recognizer"

        End Get

    End Property

 Proprietà Name:

Questa proprietà ha il compito di visualizzare il nome nell’elenco degli smarttag (figura 5) situati alla pagina  smart tag, della finestra che viene aperta facendo click sulla voce di menu opzioni di correzione automatica in strumenti di Word

Figura 5

Public ReadOnly Property Name(ByVal LocaleID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.Name

        Get

            'nome dello smart tag che verrà visualizzata nella finestra dei smart tag

            Return "Smart tag di Esempio"

        End Get

    End Property

Proprietà ProgId:

Questa proprietà ritorna il valore id della classe Recognizer:

 Public ReadOnly Property ProgId() As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.ProgId

        Get

            'ritorna il valore dell id della classe di Recognizer

            Return "SmartTagEmanuele.Recognizer"

        End Get

    End Property

Metodo Recognize:

Questo metodo ha il compito di ricercare nel documento la parola “emanuele” se viene trovata visualizza sotto la medesima parola una sottolineatura di colore viola che posizionando il mouse in prossimità visualizzerà l’icona dei smart Tag. 

Public Sub Recognize(ByVal Text As String, ByVal DataType As Microsoft.Office.Interop.SmartTag.IF_TYPE, ByVal LocaleID As Integer, ByVal RecognizerSite As Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite) Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.Recognize

        'gestisco gli eventuali errori

        Try

            'verifico che il testo esista

            Dim IntPosizione As Integer

            IntPosizione = InStr(Text, "Emanuele", CompareMethod.Text) 'Text.IndexOf("Ema") '

            If IntPosizione > 0 Then

                'creo un property bag

                Dim propbag As Microsoft.Office.Interop.SmartTag.ISmartTagProperties

                propbag = RecognizerSite.GetNewPropertyBag

                Dim StrTipoProperty As String

                Select Case DataType

                    Case IF_TYPE.IF_TYPE_CELL

                        StrTipoProperty = "IF_TYPE_CELL"

                    Case IF_TYPE.IF_TYPE_CHAR

                        StrTipoProperty = "IF_TYPE_CHAR"

                    Case IF_TYPE.IF_TYPE_PARA

                        StrTipoProperty = "IF_TYPE_PARA"

                    Case IF_TYPE.IF_TYPE_REGEXP

                        StrTipoProperty = "IF_TYPE_REGEXP"

                    Case IF_TYPE.IF_TYPE_SINGLE_WD

                        StrTipoProperty = "IF_TYPE_SINGLE_WD"

                End Select

                propbag.Write("DataType", StrTipoProperty)

                'aggiongo il testo alla funzione testo

                propbag.Write("Text", Text)

                'aggiungo l'id

                propbag.Write("LocaleID", LocaleID.ToString())

 

                RecognizerSite.CommitSmartTag("urn:esempio-smarttag#SmartTagEmanuele", IntPosizione + 1, 8, propbag)

 

 

            End If

 

        Catch ex As Exception

            EventLog.WriteEntry("SmartTag", ex.Message, EventLogEntryType.Error)

 

        End Try

 

    End Sub

 

Di seguito verrà spiegata tale procedura.

Il metodo instr restituisce un numero, che corrisponde alla posizione della parola che vogliamo cercare.

L’oggetto propbag ha il compito di gestire lo smart tag, nell’esempio viene creato tramite il metodo GetNewPropertyBag della classe RecognizerSite.

Il metodo CommitSmartTag dell’oggetto RecognizerSite ha il compito di visualizzare tale tag, questo metodo accetta 4 argomenti, il nome del tag, l’inizio da dove iniziare la sottolineatura e la lunghezza di tale sottolineatura, ed il tag. Da notare che il promi argomento, ossia il nome dello smart tag, è il nome impostato nella proprietà smartTagName.

 

Proprietà SmartTagCount:

Questa proprietà ritorna il numero dei smart tag (nel nostro caso uno)

 

Public ReadOnly Property SmartTagCount() As Integer Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.SmartTagCount

        Get

            Return 1

        End Get

    End Property

 

 

Proprietà SmartTagDownloadURl

Questa proprietà ha il compito di ritornare un possibile url

 

Public ReadOnly Property SmartTagDownloadURL(ByVal SmartTagID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.SmartTagDownloadURL

        Get

            'url dello smart tag

            Return ""

        End Get

    End Property

 

Proprietà SmartTAgName:

Questa proprietà imposta (restituisce) il nome per ogni singolo smart tag da notare che il nome dopo il cancellato è quello del progetto. 

Public ReadOnly Property SmartTagName(ByVal SmartTagID As Integer) As String Implements Microsoft.Office.Interop.SmartTag.ISmartTagRecognizer.SmartTagName

        Get

            'nome dello smart tag

            Return "urn:esempio-smarttag#SmartTagEmanuele"

        End Get

    End Property

 

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.

 

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_Users\Software\Microsoft\office\common\smart tag\actions\

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.

A corredo di tale articolo troverete un esempio.

 

 

 

Download esempio
">Download esempio
Se non funziona il donwload, inserire il seguente link, nella barra degli indirizzi web del vostro browser.
http://www.blogema.altervista.org/smarttagemanuele.zip ?>

?>

posted on martedì 26 luglio 2005 9.57