Partager via


Utilisation de la saisie semi-automatique du panneau d’entrée

Dans Windows Vista, le panneau d’entrée tablet PC intègre de nouvelles fonctionnalités de saisie semi-automatique qui permettent à la liste de saisie semi-automatique d’une application de se mettre à jour en temps réel, car l’entrée manuscrite d’un utilisateur est reconnue dans le panneau d’entrée. En outre, la liste de saisie semi-automatique de l’application est positionnée dans un emplacement pratique pour les utilisateurs du panneau d’entrée. Sans saisie semi-automatique du panneau d’entrée, l’utilisation des fonctionnalités de saisie semi-automatique avec le panneau d’entrée est un processus difficile, qui oblige les utilisateurs à insérer un caractère à la fois et à déplacer le panneau d’entrée pour accéder aux suggestions de saisie semi-automatique. Avec l’intégration, la saisie semi-automatique est un outil puissant pour les utilisateurs de Tablet PC qui accélère et augmente la facilité de saisie de texte avec le panneau d’entrée.

panneau d’entrée avec la liste de saisie semi-automatique

Il existe trois options permettant à une application de tirer parti de l’intégration de la saisie semi-automatique du panneau d’entrée. Les applications qui contiennent des fonctionnalités de saisie semi-automatique générées à l’aide de l’autocomplétion de l’interpréteur de commandes (via l’interface IAutoComplete ) ou la saisie semi-automatique .NET Framework (via l’énumération AutoCompleteMode ) reçoivent l’intégration de la saisie semi-automatique du panneau d’entrée sans qu’il soit nécessaire de modifier le code. Les applications qui incluent des champs de texte de saisie semi-automatique personnalisés peuvent utiliser l’API Saisie semi-automatique du panneau d’entrée pour obtenir les mêmes fonctionnalités.

Dans tous les cas, vous pouvez apporter ces modifications à la liste de saisie semi-automatique de l’application sans dupliquer ou modifier l’interface utilisateur ou la logique de prédiction utilisée par une application pour générer une liste de saisie semi-automatique. La liste de saisie semi-automatique continue d’être dessinée par le propriétaire par l’application et le contenu de la liste de saisie semi-automatique est le même que si le texte était tapé directement dans le champ de modification.

L’intégration de la saisie semi-automatique du panneau d’entrée est prise en charge sur le système d’exploitation Windows Vista ou les versions ultérieures. L’intégration de la saisie semi-automatique du panneau d’entrée est intégrée à la saisie semi-automatique de l’interpréteur de commandes à partir de Windows Vista et au développement Windows Forms à partir de .NET Framework version 3.0. Alors que IAutoComplete et AutoCompleteMode s’exécutent sur des versions antérieures de Windows, l’intégration de la saisie semi-automatique du panneau d’entrée n’est pas prise en charge sur Microsoft Windows XP Édition Tablet PC ou sur les systèmes d’exploitation antérieurs. Si vous exécutez la saisie semi-automatique du panneau d’entrée sur des versions antérieures de Tablet PC, les applications reviennent au comportement de pré-intégration.

Raisons d’intégrer des listes de saisie semi-automatique d’application avec le volet d’entrée

L’intégration de la liste de saisie semi-automatique d’une application offre une facilité et une vitesse d’entrée maximales pour les utilisateurs qui entrent du texte dans un champ de texte qui inclut la fonctionnalité d’autocomplétion. En outre, une application qui inclut l’intégration de la saisie semi-automatique du panneau d’entrée apparaît immédiatement comme si elle avait été développée avec le Tablet PC à l’esprit, ce qui rend l’application plus attrayante pour les utilisateurs de Tablet PC.

Comment le panneau d’entrée et la liste de saisie semi-automatique interagissent sans intégration

Utilisation du panneau d’entrée pour entrer du texte dans un champ de texte qui inclut une liste de saisie semi-automatique, mais qui n’est pas intégré au panneau d’entrée :

  1. L’utilisateur place le focus dans le champ de texte et ouvre le panneau d’entrée.
  2. L’utilisateur écrit un ou deux caractères.
  3. L’utilisateur appuie sur Insérer. Le volet d’entrée entre le texte dans le champ de texte de l’application. La liste de saisie semi-automatique de l’application s’affiche et est probablement partiellement ou complètement masquée par le panneau d’entrée.
  4. L’utilisateur fait glisser le panneau d’entrée pour découvrir la liste de saisie semi-automatique de l’application.
  5. En supposant que l’entrée correcte soit incluse dans la liste de saisie semi-automatique, l’utilisateur peut maintenant sélectionner cette entrée ; sinon, l’utilisateur doit répéter les étapes 2 et 3.

Il s’agit manifestement d’un processus fastidieux. Les attentes de l’utilisateur quant au fonctionnement d’une liste de saisie semi-automatique sont en pointillés, et sa capacité à effectuer des tâches en souffre.

Amélioration de l’interaction entre le panneau d’entrée et la liste de saisie semi-automatique avec l’intégration

Utilisation du panneau d’entrée pour entrer du texte dans un champ de texte qui inclut une liste de saisie semi-automatique intégrée au panneau d’entrée :

  1. L’utilisateur place le focus dans le champ de texte et ouvre le panneau d’entrée.
  2. L’utilisateur écrit un ou deux caractères. La liste de saisie semi-automatique de l’application s’affiche directement au-dessus ou au-dessous du panneau d’entrée lorsque l’utilisateur écrit du texte.
  3. L’utilisateur sélectionne l’entrée dans la liste saisie semi-automatique ; l’entrée est insérée directement dans le champ de texte de l’application, ou l’utilisateur répète l’étape 2 jusqu’à ce que l’entrée correcte apparaisse.

En raison de l’intégration, la liste de saisie semi-automatique s’affiche et se met à jour pendant que l’utilisateur écrit dans le panneau d’entrée. En outre, la liste est positionnée de sorte qu’elle soit à la fois pratique pour l’utilisateur d’accéder lors de l’écriture et non masquée par le panneau d’entrée. Enfin, lorsque l’utilisateur sélectionne un élément dans une liste de saisie semi-automatique, l’élément est inséré directement dans le champ de saisie de texte de l’application, ce qui permet à l’utilisateur de contourner l’étape d’insertion de texte à partir du panneau d’entrée.

panneau d’entrée avec liste de saisie semi-automatique outlook express

Composants de saisie semi-automatique standard qui incluent l’intégration de la saisie semi-automatique du panneau d’entrée

IAutoComplete et AutoCompleteMode incluent l’intégration intégrée de la saisie semi-automatique du panneau d’entrée. Les applications utilisant l’un de ces composants de saisie semi-automatique standard peuvent tirer parti de la fonctionnalité de saisie semi-automatique du panneau d’entrée avec peu ou pas de travail supplémentaire. En outre, alors que la saisie semi-automatique du panneau d’entrée est uniquement prise en charge sur Windows Vista ou les nouvelles versions du système d’exploitation Windows, les applications qui ont été créées à l’aide d’IAutoComplete avant la publication de Windows Vista bénéficient automatiquement de l’intégration de la saisie semi-automatique du panneau d’entrée lorsqu’elles sont exécutées sur Windows Vista. Les sections suivantes contiennent plus d’informations sur les éléments IAutoComplete et AutoCompleteMode spécifiques qui incluent l’intégration de la saisie semi-automatique du panneau d’entrée.

Saisie semi-automatique de l’interpréteur de commandes avec intégration de la saisie semi-automatique du panneau d’entrée

Les applications qui utilisent IAutoComplete bénéficient gratuitement de l’intégration de la saisie semi-automatique du panneau d’entrée. Bien que les API de saisie semi-automatique de l’interpréteur de commandes soient incluses dans Windows 2000 et versions ultérieures, l’intégration de la saisie semi-automatique du panneau d’entrée est uniquement prise en charge sur Windows Vista et les versions plus récentes. Toutefois, les applications créées avant la publication de Windows Vista qui utilisent IAutoComplete obtiennent automatiquement l’intégration de la saisie semi-automatique du panneau d’entrée lorsqu’elles sont exécutées sur Windows Vista.

Pour tirer parti de la saisie semi-automatique de la tablette de cette façon, vous devez utiliser l’objet autocomplétion (CLSID_Autocomplete). Si vous souhaitez fournir des fonctionnalités d’autocomplétion pour les URL ou les noms de fichiers, utilisez la fonction SHAutoComplete pour créer l’objet autocomplétion.

En plus d’IAutoComplete, vous pouvez implémenter IAutoComplete2 ou IAutoCompleteDropDowndirectement tout en continuant à obtenir automatiquement l’intégration de la saisie semi-automatique du panneau d’entrée.

Intégration de la saisie semi-automatique du panneau d’entrée aux applications .NET Framework

À compter de .NET Framework 3.0, Windows Forms zones de texte incluent la saisie semi-automatique. Windows Forms zone de texte La saisie semi-automatique est basée sur l’autocomplétion de l’interpréteur de commandes, ce qui signifie que l’intégration de la saisie semi-automatique du panneau d’entrée est également intégrée. .NET Framework 3.0 est pris en charge de niveau inférieur sur les éditions de Windows publiées avant Windows Vista. Toutefois, étant donné que l’intégration de la saisie semi-automatique du panneau d’entrée est uniquement prise en charge sur Windows Vista ou les versions ultérieures, l’intégration de la saisie semi-automatique du panneau d’entrée fonctionne uniquement dans une application .NET Framework 3.0 lorsqu’elle est installée sur Windows Vista ou versions ultérieures.

Les applications qui souhaitent tirer parti de l’intégration de la saisie semi-automatique du panneau d’entrée dans .NET Framework 3.0 doivent utiliser un Windows Forms TextBox avec la propriété AutoCompleteMode activée. Vous n’avez pas besoin d’effectuer d’autres tâches que d’obtenir Windows Forms autocomplétion pour tirer parti de l’intégration de la saisie semi-automatique du panneau d’entrée.

Utilisation directe des API de saisie semi-automatique du panneau d’entrée

Les développeurs de zones de texte saisie semi-automatique personnalisées doivent travailler directement avec les API saisie semi-automatique du panneau d’entrée afin d’obtenir l’expérience de saisie de texte améliorée que l’intégration de la saisie semi-automatique du panneau d’entrée permet dans leurs applications. Les API de saisie semi-automatique du panneau d’entrée sont incluses dans le système d’exploitation Windows Vista et dans le cadre du Kit de développement logiciel (SDK) Tablet Platform version 1.9 ou ultérieure. Les interfaces de saisie semi-automatique du panneau d’entrée sont des interfaces COM.

La section suivante décrit l’utilisation de ces interfaces en détail pour une application C++. Toutefois, ces interfaces COM peuvent être implémentées dans la plupart des langages, y compris C#, à l’aide de COM Interop.

Pour implémenter l’intégration de la saisie semi-automatique du panneau d’entrée dans une zone de texte de saisie semi-automatique personnalisée, les deux interfaces requises sont ITipAutocompleteProvider Interface et ITipAutocompleteClient Interface. Les définitions de ces interfaces se trouvent dans TipAutoComplete.h et TipAutoComplete_i.c.

Tout d’abord, une application doit définir et instancier une classe de fournisseur Autocomplete, qui implémente ITipAutocompleteProvider pour chaque champ d’entrée de texte qui inclut une liste de saisie semi-automatique. Cette classe gère le côté application de l’intégration de la saisie semi-automatique. Toutes les demandes de saisie semi-automatique du panneau d’entrée sont effectuées à partir du client Autocomplétion à l’application via le fournisseur de saisie semi-automatique de l’application. Le fournisseur d’autocomplétion de l’application doit avoir accès à la fois au HWND pour la liste de saisie semi-automatique de l’application et au HWIND pour le champ de saisie de texte associé. En outre, les méthodes suivantes de ITipAutocompleteProvider doivent être implémentées :

  • ITipAutocompleteProvider::UpdatePendingText, méthode : cette méthode est utilisée par le client autocomplétion pour notifier l’application du texte qu’un utilisateur a écrit dans le panneau d’entrée. À la réception de cette notification, le fournisseur est chargé de générer une liste de saisie semi-automatique comme si le texte avait été tapé dans le champ de saisie de texte de l’application. La chaîne passe au fournisseur de saisie semi-automatique au moyen de la méthode ITipAutocompleteProvider::UpdatePendingText inclut uniquement le texte actuellement dans le panneau d’entrée. Par conséquent, s’il existe du texte supplémentaire dans le champ de saisie de texte, il incombe au fournisseur de l’ajouter correctement au texte envoyé par le client. La chaîne passée par la méthode ITipAutocompleteProvider::UpdatePendingText doit être traitée comme un remplacement de la sélection actuelle dans le champ. S’il n’existe aucune sélection actuelle, elle doit être placée à la position du point d’insertion actuel. Une fois la liste de saisie semi-automatique générée, le fournisseur doit appeler la méthode ITipAutocompleteProvider::Show en passant par TRUE pour afficher la liste de saisie semi-automatique. L’application ne doit pas mettre en cache les appels à UpdatePendingText , mais plutôt traiter chaque appel supplémentaire à UpdatePendingText comme une annulation de l’appel précédent pour éviter de flasher une interface utilisateur de liste de saisie semi-automatique obsolète. L’exemple de code suivant illustre ces pratiques.

    HRESULT SampleProvider::UpdatePendingText(BSTR bstrPendingText)
    {
       //Discard previously cached pending text from Input Panel
       m_bstrPending.Empty();
        //Store the new pending text from Input Panel as m_bstrPending
    m_bstrPending = bstrPendingText;
    
        //Get the text from the field in two chunks. The characters to
    //the left of the selection and the characters to the right.
    CComBSTR bstrLeftContext = //Text to the left of the selection
            CComBSTR bstrRightContext = //Text to the right of the selection
    
    //Discard previously cached complete text
        m_bstrCompleteText.Empty();
        //Append to the field text from the left of the selection
        //the text from Input Panel and then append to that
        //the field text to the right of the selection
        m_bstrCompleteText.Append(bstrLeftContext);
        m_bstrCompleteText.Append(m_bstrPending);
        m_bstrCompleteText.Append(bstrRigtContext);
    
        //Update the app's AC list based on m_bstrCompleteText
        //...
    
        //Show the updated AC list by calling the provider's Show method
       Show(true);
       return S_OK;
    }
    
  • ITipAutocompleteProvider::Show, méthode : cette méthode est appelée à partir de UpdatePendingText, mais peut également être appelée par le client de saisie semi-automatique à tout moment. Lors de la réception de cet appel, le fournisseur de saisie semi-automatique doit masquer ou afficher le fournisseur de saisie semi-automatique comme indiqué par le paramètre . Avant d’afficher la liste de saisie semi-automatique, le fournisseur de saisie semi-automatique doit consulter le client de saisie semi-automatique pour savoir où positionner la liste de saisie semi-automatique. Vous trouverez plus d’informations sur le positionnement de la liste de saisie semi-automatique plus loin dans cet article.

Ensuite, l’application doit utiliser la fonction Active Template Library (ATL) CoCreateInstance pour produire une instance de l’interface ITipAutocompleteClient avec l’ID de classe CLSID_TipAutoCompleteClient en tant que serveur in-process, puis inscrire le fournisseur auprès du client. La méthode ITipAutocompleteClient::AdviseProvider du client autocomplétion inscrit le fournisseur auprès du client pour permettre au client d’appeler l’objet fournisseur de saisie semi-automatique de l’application. Si tiptsf.dll n’est pas présent sur le système, la fonction CoCreateInstance échoue et retourne REGDB_E_CLASSNOTREG. À ce stade, l’application peut ignorer son objet ITipAutocompleteProvider et continuer comme si le panneau d’entrée n’existait pas, car il n’existe pas sur un tel système.

L’application peut choisir de créer un instance d’ITipAutocompleteClient ou un instance par champ de texte. La première option nécessite que le fournisseur soit désinscrit et inscrit chaque fois que le focus est modifié. Plus d’informations sur la désinscription du fournisseur de saisie semi-automatique apparaissent plus loin dans cette rubrique.

Le positionnement de la liste de saisie semi-automatique implique plusieurs étapes qui doivent être coordonnées entre le fournisseur de saisie semi-automatique (application) et le client de saisie semi-automatique (panneau d’entrée). Avant l’affichage de la liste de saisie semi-automatique, soit à la suite d’un appel à la méthode Show du fournisseur de saisie semi-automatique, soit en raison de l’entrée de texte par l’utilisateur à l’aide du clavier, le fournisseur doit consulter le client pour savoir où placer la liste de saisie semi-automatique. Le fournisseur doit effectuer les étapes suivantes :

  • Utilisez la méthode ITipAutocompleteClient::RequestShowUI du client de saisie semi-automatique pour déterminer si le panneau d’entrée est prêt à afficher la liste de saisie semi-automatique. RequestShowUI prend le paramètre HWND qui est le HWND pour la fenêtre de liste de saisie semi-automatique, et la méthode retourne TRUE ou FALSE pour indiquer s’il s’agit de l’état dans lequel la liste de saisie semi-automatique peut être affichée. Si le client retourne FALSE, le fournisseur ne doit pas essayer d’afficher la liste de saisie semi-automatique.

  • Appelez RequestShowUI pour définir le handle de la fenêtre de liste de saisie semi-automatique avant d’appeler la méthode ITipAutocompleteClient::P referredRects. Si vous ne le faites pas, une erreur de E_INVALIDARG est générée lors de l’appel de PreferredRects.

  • Si RequestShowUI retourne TRUE, le fournisseur doit calculer le rectangle de coordonnées d’écran par défaut de la liste de saisie semi-automatique en fonction de l’emplacement du champ d’entrée de texte, puis appeler la méthode ITipAutocompleteClient::P referredRects du client de saisie semi-automatique. Cela permet au client de saisie semi-automatique d’ajuster le rectangle pour éviter que la liste de saisie semi-automatique ne se chevauche avec le panneau d’entrée. La méthode PreferredRects prend quatre paramètres :

    • RECT rcACList : rectangle de coordonnées d’écran par défaut de la liste de saisie semi-automatique.
    • RECT rcField : rectangle de coordonnées d’écran du champ de saisie de texte correspondant.
    • RECT *prcModifiedACList : rectangle de coordonnées d’écran ajusté pour la saisie semi-automatique
    • BOOL *pfShowAbove : ce paramètre indique au fournisseur si le rectangle prcModifiedACList positionne la liste de saisie semi-automatique au-dessus ou en dessous du panneau d’entrée. L’application peut utiliser ces informations pour dessiner correctement des éléments d’interface utilisateur, tels que des poignées de redimensionnement et des barres de défilement. Le fournisseur doit d’abord passer dans le sens où la liste de saisie semi-automatique est positionnée par rapport au champ de saisie de texte par rcACList. Le client ne modifie pas pfShowAbove s’il définit prcModifiedACList égal à rcACList.

    Utilisez les valeurs de retour des arguments prcModifiedACList et pfShowAbove out pour positionner et afficher la fenêtre de liste de saisie semi-automatique. Si le panneau d’entrée n’est pas utilisé, RequestShowUI retourne toujours TRUE et prcModifiedACList est toujours identique à rcACList. pfShowAbove est également inchangé, le résultat étant que les appels n’ont aucun impact sur le comportement de l’application. L’exemple de code suivant illustre ces pratiques.

HRESULT SampleProvider::Show(BOOL fShow)
{
    //Ask the AC client if it is OK to show the Autocomplete list.
    BOOL fAllowShowing = FALSE;
    m_spACClient->RequestShowUI(m_hWndList, &fAllowShowing);

    if (fShow && fAllowingShowing)
        {
            // Create the parameters required to call PreferredRects
            RECT rcField = //Rectangle for app's text field
            RECT rcACList = //Default rectangle for app's AC list
            RECT rcModifiedACList = {0, 0, 0, 0};
            BOOL fShowAbove = TRUE;

//Ask the AC client to modify the position of the AC list
m_spACClient->PreferredRects(&rcACList, &rcField,
&rcModifiedACList, &fShowAbove);

            //Show the Autocomplete UI at the modified preferred rectangle
            //from rcModifiedACList and the directional info provide by
//fShowAbove
            //...
        }
    else
        {
        //Hide the Autocomplete list and clean up
        //...
        }
    return S_OK;
}

Lorsque l’utilisateur sélectionne un élément dans la liste de saisie semi-automatique, le fournisseur doit appeler la méthode ITipAutocompleteClient::UserSelection du client en plus d’insérer le texte de l’élément sélectionné dans le champ de saisie de texte. Le panneau d’entrée utilise cette notification pour ignorer tout le texte restant qui n’a pas encore été inséré à partir du panneau d’entrée.

Enfin, lorsque le fournisseur n’est plus nécessaire, le fournisseur doit être dissocié du client de saisie semi-automatique en appelant la méthode ITipAutocompleteClient::UnadviseProvider du client pour annuler l’inscription du fournisseur. Le fournisseur peut avoir besoin d’être désinscrit pour l’une des deux raisons suivantes : parce que le champ d’entrée de texte auquel le fournisseur est associé a été détruit, ou parce que l’application choisit de créer un seul client de saisie semi-automatique au lieu d’un seul par champ de saisie de texte. Dans ce instance le fournisseur doit être désinscrit chaque fois que le focus est supprimé du champ de texte.

Conclusion

L’intégration de la saisie semi-automatique du panneau d’entrée est un outil puissant permettant d’améliorer l’expérience utilisateur dans les applications Windows qui incluent des listes de saisie semi-automatique sur des pc tablettes. Sans intégration, les utilisateurs du panneau d’entrée doivent passer par un processus fastidieux d’insertion de texte un caractère à la fois et de repositionnement du panneau d’entrée afin d’utiliser la saisie semi-automatique. Avec l’intégration, les listes de saisie semi-automatique s’affichent à un emplacement pratique lorsque les utilisateurs entrent dans le panneau d’entrée, ce qui augmente la vitesse et la facilité de saisie de texte. Dans les applications qui incluent la fonctionnalité de saisie semi-automatique basée sur la saisie semi-automatique ou la saisie semi-automatique de .NET Framework 3.0, l’intégration de la saisie semi-automatique du panneau d’entrée est une fonctionnalité gratuite et attrayante. En outre, un ensemble simple d’interfaces COM est fourni pour permettre la même expérience intégrée pour les applications qui choisissent d’utiliser des contrôles de saisie semi-automatique personnalisés.

Informations de référence sur le panneau d’entrée de texte