Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Word
Mise à jour : Juillet 2008
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés. Projets au niveau du document
Projets au niveau de l'application
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
Vous pouvez contrôler la manière dont Microsoft Office Word reconnaît des balises actives dans les documents par une dérivation de la classe Microsoft.Office.Tools.Word.SmartTag et une substitution de la méthode Recognize.
Pour exécuter une balise active, les balises actives doivent être activées dans Word ou Excel. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.
Pour ajouter une balise active avec un module de reconnaissance personnalisé à un document Word
Créez un projet au niveau du document ou de l'application pour Word. Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.
Remarque : Pour utiliser un projet au niveau de l'application, vous devez avoir préalablement installé Visual Studio 2008 Service Pack 1 (SP1).
Ajoutez une référence à Bibliothèque de types Microsoft Smart Tags 2.0 de l'onglet COM de la boîte de dialogue Ajouter une référence.
Ajoutez un fichier de classe au projet et créez une classe qui hérite de Microsoft.Office.Tools.Word.SmartTag.
Dans la nouvelle classe, créez les actions pour les balises actives. Les actions sont des éléments qui apparaissent dans le menu Balise active. Créez des actions en ajoutant des instances du type Action à la collection Actions de votre classe.
Substituez la méthode Recognize pour implémenter votre propre comportement de reconnaissance personnalisé.
Votre implémentation de Recognize doit appeler la méthode PersistTag pour que Word reconnaisse la balise active.
Créez des gestionnaires d'événements pour répondre à l'événement Click et, éventuellement, à l'événement BeforeCaptionShow, des actions que vous avez créées.
Dans le fichier de code pour le document du projet, ajoutez l'instance de balise active à la propriété VstoSmartTags de la classe ThisDocument (pour un projet au niveau du document) ou la propriété VstoSmartTags de la classe ThisAddIn (pour un projet au niveau de l'application).
Remarque : Si vous utilisez un projet au niveau de l'application que vous avez créé avant d'installer le SP1, vous devez le modifier avant de pouvoir générer la propriété VstoSmartTags. Pour plus d'informations, consultez Comment : ajouter des balises actives d'application à des projets créés avant SP1.
Exemple
L'exemple de code suivant indique comment créer une balise active personnalisée dans un document Word. Il substitue la méthode Recognize pour reconnaître les termes sales et organization. La méthode Recognize ajoute une paire clé-valeur à la collection de propriétés à clé de la balise active. La méthode appelle ensuite la méthode PersistTag pour reconnaître la balise active et enregistrer la nouvelle propriété de balise active.
Pour tester l'exemple, tapez les mots anglais sales et organization dans différents emplacements du document, puis essayez les actions de la balise active. Une action affiche la valeur de propriété correspondante pour le terme reconnu, et l'autre action affiche l'espace de noms et la légende de la balise active.
Imports Microsoft.Office.Tools.Word
Imports Microsoft.Office.Interop.SmartTag
Public Class CustomSmartTag
Inherits SmartTag
' Declare Actions for this SmartTag
WithEvents Action1 As New Action("Display property value")
WithEvents Action2 As New Action("Display smart tag details")
Public Sub New()
MyBase.New("https://www.contoso.com/Demo#DemoSmartTag", _
"Custom Smart Tag")
Me.Terms.AddRange(New String() {"sales", "organization"})
Actions = New Action() {Action1, Action2}
End Sub
Protected Overrides Sub Recognize(ByVal text As String, _
ByVal site As ISmartTagRecognizerSite, _
ByVal tokenList As ISmartTagTokenList)
' Determine whether each smart tag term exists in
' the document text.
Dim Term As String
For Each Term In Me.Terms
' Search the text for the current smart tag term.
Dim index As Integer = Me.ParagraphText.IndexOf(Term, 0)
While (index >= 0)
' Create a smart tag token and a property bag for the
' recognized term.
Dim propertyBag As ISmartTagProperties = _
site.GetNewPropertyBag()
' Write a new property value.
Dim key As String = "Key1"
propertyBag.Write(key, DateTime.Now)
' Attach the smart tag to the term in the document
Me.PersistTag(index, Term.Length, propertyBag)
' Increment the index and then find the next
' instance of the smart tag term.
index += Term.Length
index = ParagraphText.IndexOf(Term, index)
End While
Next
End Sub
' This action displays the property value for the term.
Private Sub Action1_Click(ByVal sender As Object, _
ByVal e As ActionEventArgs) Handles Action1.Click
Dim propertyBag As ISmartTagProperties = e.Properties
Dim key As String = "Key1"
MsgBox("The corresponding value of " & _
key & " is: " & propertyBag.Read(key))
End Sub
' This action displays smart tag details.
Private Sub Action2_Click(ByVal sender As Object, _
ByVal e As ActionEventArgs) Handles Action2.Click
MsgBox("The current smart tag caption is '" & _
Me.Caption & "'. The current smart tag type is '" & _
Me.SmartTagType & "'.")
End Sub
End Class
using System;
using System.Windows.Forms;
using Microsoft.Office.Tools.Word;
using Microsoft.Office.Interop.SmartTag;
public class CustomSmartTag : Microsoft.Office.Tools.Word.SmartTag
{
// Declare Actions for this SmartTag
private Microsoft.Office.Tools.Word.Action Action1 =
new Microsoft.Office.Tools.Word.Action("Display property value");
private Microsoft.Office.Tools.Word.Action Action2 =
new Microsoft.Office.Tools.Word.Action("Display smart tag details");
public CustomSmartTag() : base(
"https://www.contoso.com/Demo#DemoSmartTag",
"Custom Smart Tag")
{
this.Terms.AddRange(new string[] {
"sales", "organization" });
Actions = new Microsoft.Office.Tools.Word.Action[] {
Action1, Action2 };
Action1.Click +=
new ActionClickEventHandler(Action1_Click);
Action2.Click +=
new ActionClickEventHandler(Action2_Click);
}
protected override void Recognize(string text,
ISmartTagRecognizerSite site, ISmartTagTokenList tokenList)
{
foreach (string term in this.Terms)
{
// Search the text for the current smart tag term.
int index = this.ParagraphText.IndexOf(term, 0);
while (index >= 0)
{
// Create a smart tag token and a property bag for the
// recognized term.
ISmartTagProperties propertyBag =
site.GetNewPropertyBag();
// Write a new property value.
string key = "Key1";
propertyBag.Write(key, DateTime.Now.ToString());
// Attach the smart tag to the term in the document
this.PersistTag(index, term.Length, propertyBag);
// Increment the index and then find the next
// instance of the smart tag term.
index += term.Length;
index = ParagraphText.IndexOf(term, index);
}
}
}
// This action displays the property value for the term.
private void Action1_Click(object sender,
Microsoft.Office.Tools.Word.ActionEventArgs e)
{
ISmartTagProperties propertyBag = e.Properties;
string key = "Key1";
MessageBox.Show("The corresponding value of " + key +
" is: " + propertyBag.get_Read(key));
}
// This action displays smart tag details.
private void Action2_Click(object sender,
Microsoft.Office.Tools.Word.ActionEventArgs e)
{
MessageBox.Show("The current smart tag caption is '" +
this.Caption + "'. The current smart tag type is '" +
this.SmartTagType + "'.");
}
}
Compilation du code
Ajoutez une référence dans le projet à Bibliothèque de types Microsoft Smart Tags 2.0 de l'onglet COM de la boîte de dialogue Ajouter une référence. Vérifiez que la propriété Copie locale de la référence a la valeur false. Si la valeur est true, la référence n'est pas l'assembly PIA (Primary Interop Assembly) correct et vous devez installer l'assembly à partir du média d'installation Microsoft Office. Pour plus d'informations, consultez Comment : installer les assemblys PIA (Primary Interop Assembly) d'Office.
Placez l'exemple de code dans un nouveau fichier de classe appelé CustomSmartTag.
En C#, modifiez l'espace de noms pour faire correspondre le nom du projet.
Ajoutez des instructions Imports (en Visual Basic) ou using (en C#) pour les espaces de noms Microsoft.Office.Tools.Word et Microsoft.Office.Interop.SmartTag en haut du fichier de classe.
Ajoutez le code suivant au gestionnaire d'événements ThisDocument_Startup ou ThisAddIn_Startup de votre projet. Ce code ajoute la balise active personnalisée au document.
Me.VstoSmartTags.Add(New CustomSmartTag())
this.VstoSmartTags.Add(new CustomSmartTag());
Sécurité
Pour exécuter la balise active, celles-ci doivent être activées dans Word. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.
Voir aussi
Tâches
Comment : activer des balises actives dans Word et Excel
Comment : ajouter des balises actives à des documents Word
Comment : ajouter des balises actives aux classeurs Excel
Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Excel
Procédure pas à pas : création d'une balise active à l'aide d'un complément d'application
Concepts
Vue d'ensemble des balises actives
Architecture des balises actives
Historique des modifications
Date |
Historique |
Raison |
---|---|---|
Juillet 2008 |
Nouvelles informations ajoutées pour les compléments d'application. |
Modifications de fonctionnalités dans le SP1. |