Procédure pas à pas : création d'une application Windows accessible

Mise à jour : novembre 2007

La création d'une application accessible aux personnes atteintes d'un handicap a d'importantes implications commerciales. De nombreux gouvernements ont en effet prévu dans ce domaine une législation qui régit l'achat des logiciels. Les exigences en matière d'accessibilité sont garanties par le label Certifié pour Windows. À l'échelle mondiale, on estime que 500 millions de personnes sont atteintes d'un handicap. En France, ce nombre s'élève à plus de 5 millions (dont 677 000 personnes non-voyantes ou malvoyantes), soit près d'un français sur dix.

Cette rubrique présente les cinq critères d'accessibilité auxquels doit répondre un logiciel pour obtenir le label « Certifié pour Windows ». Pour répondre à ces critères, une application accessible doit :

  • Prendre en charge les paramètres de taille, de couleur, de police et de mode d'entrée du Panneau de configuration. Les barres de menus, de titre et d'état ainsi que les bordures se redimensionnent toutes automatiquement lorsque l'utilisateur modifie les paramètres du Panneau de configuration. Aucune autre modification des contrôles ou du code n'est requise dans cette application.

  • Prendre en charge le mode Contraste élevé.

  • Fournir un accès à toutes les fonctionnalités par le clavier et la documentation correspondante.

  • Exposer l'emplacement du focus clavier de façon visuelle et par programme.

  • Éviter de communiquer des informations importantes uniquement par voie sonore.

Pour plus d'informations, consultez Ressources pour concevoir des applications accessibles ainsi que les pages Web MSDN Online Certified for Windows Program (https://www.microsoft.com/france/formation) et Designed for Windows XP Application Specification (https://go.microsoft.com/fwlink/?linkid=9775).

Pour plus d'informations sur la prise en charge des différentes dispositions du clavier, consultez Meilleures pratiques pour développer des applications mondialisables.

Création du projet

La procédure pas à pas présentée ici crée l'interface utilisateur d'une application de commande de pizza. Elle se compose d'un contrôle TextBox pour le nom du client, d'un groupe RadioButton pour le choix de la taille de la pizza, d'un contrôle CheckedListBox pour la sélection des ingrédients, de deux contrôles Button portant respectivement les étiquettes Order (Commander) et Cancel (Annuler), et enfin d'un contrôle Menu comportant une commande Exit (Quitter).

L'utilisateur entre le nom du client, la taille de la pizza et les ingrédients souhaités. Lorsqu'il clique sur le bouton Order, un résumé de la commande et son prix s'affichent dans un message, et tous les contrôles sont effacés en prévision de la prochaine commande. Si l'utilisateur clique sur le bouton Cancel, les contrôles sont effacés en prévision de la prochaine commande. S'il clique sur l'élément de menu Exit, le programme se ferme.

Cette procédure n'a pas pour but d'illustrer un système de saisie de commande, mais de montrer comment l'accessibilité est mise en œuvre dans une interface utilisateur. Elle illustre les fonctionnalités d'accessibilité de contrôles fréquemment utilisés comprenant aussi bien des boutons et des cases d'option que des zones de texte et des étiquettes.

Pour créer l'application

  • Créez une application Windows en Visual Basic, Visual C# ou Visual J#. Appelez le projet PizzaOrder. (Pour plus d'informations, consultez Création de solutions et de projets.)

Ajout de contrôles au formulaire

Lorsque vous ajoutez des contrôles à un formulaire, respectez les instructions suivantes pour rendre votre application accessible :

  • Définissez les propriétés AccessibleDescription et AccessibleName. Dans cet exemple, le paramètre Default pour AccessibleRole est suffisant. Pour plus d'informations sur les propriétés d'accessibilité, consultez Informations d'accessibilité sur les contrôles d'un Windows Form.

  • Définissez une taille de police de 10 points ou plus.

    Remarque :

    Si vous affectez la valeur 10 à la taille de la police du formulaire au démarrage, tous les contrôles qui seront ensuite ajoutés au formulaire auront une taille de police égale à 10 points.

  • Assurez-vous que tous les contrôles Label décrivant un contrôle TextBox précèdent immédiatement ce dernier dans l'ordre de tabulation.

  • À l'aide du caractère « & », ajoutez une touche d'accès rapide à la propriété Text de tous les contrôles auxquels l'utilisateur est susceptible d'accéder.

  • À l'aide du caractère « & », ajoutez une touche d'accès rapide à la propriété Text de l'étiquette précédant un contrôle auquel l'utilisateur est susceptible d'accéder. Affectez à la propriété UseMnemonic de l'étiquette la valeur true pour que le focus passe au contrôle suivant dans l'ordre de tabulation lorsque l'utilisateur appuie sur la touche d'accès rapide.

  • Ajoutez des touches d'accès rapide à tous les éléments de menu.

Pour rendre votre application Windows accessible

  • Ajoutez les contrôles au formulaire et définissez les propriétés comme décrit dans le tableau ci-dessous. À la suite de ce tableau, une illustration vous montre comment disposer les contrôles dans le formulaire.

    Objet

    Propriété

    Valeur

    Form1

    AccessibleDescription

    Order form

     

    AccessibleName

    Order form

     

    Font Size

    10

     

    Text

    Pizza Order Form

    PictureBox

    Name

    logo

     

    AccessibleDescription

    A slice of pizza

     

    AccessibleName

    Company logo

     

    Image

    Any icon or bitmap

    Label

    Name

    companyLabel

     

    Text

    Good Pizza

     

    TabIndex

    1

     

    AccessibleDescription

    Company name

     

    AccessibleName

    Company name

     

    Backcolor

    Blue

     

    Forecolor

    Yellow

     

    Font size

    18

    Label

    Name

    customerLabel

     

    Text

    &Name

     

    TabIndex

    2

     

    AccessibleDescription

    Customer name label

     

    AccessibleName

    Customer name label

     

    UseMnemonic

    True

    TextBox

    Name

    customerName

     

    Text

    (none)

     

    TabIndex

    3

     

    AccessibleDescription

    Customer name

     

    AccessibleName

    Customer name

    GroupBox

    Name

    sizeOptions

     

    AccessibleDescription

    Pizza size options

     

    AccessibleName

    Pizza size options

     

    Text

    Pizza size

     

    TabIndex

    4

    RadioButton

    Name

    smallPizza

     

    Text

    &Small $6.00

     

    Checked

    True

     

    TabIndex

    0

     

    AccessibleDescription

    Small pizza

     

    AccessibleName

    Small pizza

    RadioButton

    Name

    largePizza

     

    Text

    &Large $10.00

     

    TabIndex

    1

     

    AccessibleDescription

    Large pizza

     

    AccessibleName

    Large pizza

    Label

    Name

    toppingsLabel

     

    Text

    &Toppings ($0.75 each)

     

    TabIndex

    5

     

    AccessibleDescription

    Toppings label

     

    AccessibleName

    Toppings label

     

    UseMnemonic

    True

    CheckedListBox

    Name

    toppings

     

    TabIndex

    6

     

    AccessibleDescription

    Available toppings

     

    AccessibleName

    Available toppings

     

    Items

    Pepperoni, Sausage, Mushrooms

    Button

    Name

    order

     

    Text

    &Order

     

    TabIndex

    7

     

    AccessibleDescription

    Total the order

     

    AccessibleName

    Total order

    Button

    Name

    cancel

     

    Text

    &Cancel

     

    TabIndex

    8

     

    AccessibleDescription

    Cancel the order

     

    AccessibleName

    Cancel order

    MainMenu

    Name

    theMainMenu

    MenuItem

    Name

    fileCommands

     

    Text

    &File

    MenuItem

    Name

    exitApp

     

    Text

    E&xit

    Votre formulaire devrait ressembler à ceci :

    Formulaire de commande de pizza

Prise en charge du mode Contraste élevé

Le mode Contraste élevé est un paramètre du système Windows qui fait appel à des couleurs contrastées et à des polices agrandies pour améliorer la lisibilité des utilisateurs malvoyants. La propriété SystemInformation.HighContrast est fournie pour vous permettre de déterminer si le mode Contraste élevé est activé.

Si SystemInformation.HighContrast a la valeur true, l'application doit :

  • Afficher tous les éléments de l'interface utilisateur à l'aide du modèle de couleurs système.

  • Communiquer par voie audio ou visuelle toutes les informations qui le sont par le biais des couleurs. Par exemple, si vous utilisez une police d'affichage rouge pour mettre en surbrillance certains éléments de liste, vous pouvez également ajouter du gras à cette police ; l'utilisateur disposera ainsi d'un autre moyen que la couleur pour savoir que les éléments sont mis en surbrillance.

  • Omettre tous les motifs et images placés en arrière-plan du texte.

L'application doit vérifier le paramètre de HighContrast lors de son démarrage et répondre à l'événement système UserPreferenceChanged. L'événement UserPreferenceChanged est déclenché à chaque modification de la valeur de HighContrast.

Dans notre exemple d'application, lblCompanyName est le seul élément qui n'utilise pas les paramètres système pour les couleurs. La classe SystemColors permet de substituer aux paramètres de couleurs de l'étiquette les couleurs système sélectionnées par l'utilisateur.

Pour activer efficacement le mode Contraste élevé

  1. Créez une méthode pour affecter à l'étiquette les couleurs système.

    ' Visual Basic
    Private Sub SetColorScheme()
       If SystemInformation.HighContrast Then
          companyLabel.BackColor = SystemColors.Window
          companyLabel.ForeColor = SystemColors.WindowText
       Else
          companyLabel.BackColor = Color.Blue
          companyLabel.ForeColor = Color.Yellow
       End If
    End Sub
    
    // C#
    private void SetColorScheme()
    {
       if (SystemInformation.HighContrast)
       {
          companyLabel.BackColor = SystemColors.Window;
          companyLabel.ForeColor = SystemColors.WindowText;
       }
       else
       {
          companyLabel.BackColor = Color.Blue;
          companyLabel.ForeColor = Color.Yellow;
       }
    }
    
    // Visual J#
    private void SetColorScheme()
    {
       if (SystemInformation.get_HighContrast())
       {
          companyLabel.set_BackColor(SystemColors.get_Window());
          companyLabel.set_ForeColor(SystemColors.get_WindowText());
       }
       else
       {
          companyLabel.set_BackColor(Color.get_Blue());
          companyLabel.set_ForeColor(Color.get_Yellow());
       }
    }
    
  2. Appelez la procédure SetColorScheme dans le constructeur de formulaire (Public Sub New() en Visual Basic, public class Form1 en Visual C# et Public Form1 en Visual J#). Pour accéder au constructeur dans Visual Basic, vous devez développer la région étiquetée Code généré par le Concepteur Windows Form.

    ' Visual Basic 
    Public Sub New()
       MyBase.New()
       InitializeComponent()
       SetColorScheme()
    End Sub
    
    // C#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
    }
    
    // Visual J#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
    }
    
  3. Créez une procédure événementielle, avec la signature appropriée, pour répondre à l'événement UserPreferenceChanged.

    ' Visual Basic
    Protected Sub UserPreferenceChanged(ByVal sender As Object, _
    ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs)
       SetColorScheme()
    End Sub
    
    // C#
    public void UserPreferenceChanged(object sender, 
    Microsoft.Win32.UserPreferenceChangedEventArgs e)
    {
       SetColorScheme();
    }
    // Visual J#
    public void UserPreferenceChanged(Object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e)
    {
       SetColorScheme();
    }
    
  4. Ajoutez du code au constructeur de formulaire, à la suite de l'appel à InitializeComponents, pour raccorder la procédure événementielle à l'événement système. Cette méthode appelle la procédure SetColorScheme .

    ' Visual Basic
    Public Sub New()
       MyBase.New()
       InitializeComponent()
       SetColorScheme()
       AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _
          AddressOf Me.UserPreferenceChanged
    End Sub
    
    // C#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
       Microsoft.Win32.SystemEvents.UserPreferenceChanged 
          += new Microsoft.Win32.UserPreferenceChangedEventHandler(
          this.UserPreferenceChanged);
    }
    
    // Visual J#
    public Form1()
    {
       //
       // Required for Windows Form Designer support
       //
       InitializeComponent();
       SetColorScheme();
       Microsoft.Win32.SystemEvents.add_UserPreferenceChanged(
           new Microsoft.Win32.UserPreferenceChangedEventHandler(this.UserPreferenceChanged));
       //
       // Add any constructor code after InitializeComponent call
       //
    }
    
  5. Ajoutez du code à la méthode Dispose du formulaire, avant l'appel à la méthode Dispose de la classe de base, pour libérer l'événement lorsque l'application se ferme. Pour accéder à la méthode Dispose dans Visual Basic, vous devez développer la région étiquetée Code généré par le Concepteur Windows Form.

    Remarque :

    Le code de l'événement système exécute un thread distinct de l'application principale. Si vous ne libérez pas l'événement, le code que vous lui raccordez s'exécutera même après que le programme se sera fermé.

    ' Visual Basic
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing Then
          If Not (components Is Nothing) Then
             components.Dispose()
          End If
       End If
       RemoveHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _
          AddressOf Me.UserPreferenceChanged
       MyBase.Dispose(disposing)
    End Sub
    
    
    // C#
    protected override void Dispose( bool disposing )
    {
       if( disposing )
       {
          if (components != null) 
          {
             components.Dispose();
          }
       }
       Microsoft.Win32.SystemEvents.UserPreferenceChanged 
          -= new Microsoft.Win32.UserPreferenceChangedEventHandler(
          this.UserPreferenceChanged);
       base.Dispose( disposing );
    }
    
    // Visual J#
    protected void Dispose(boolean disposing)
    {
       if (disposing)
       {
          if (components != null)
             {
                components.Dispose();
             }
          }
          Microsoft.Win32.SystemEvents.remove_UserPreferenceChanged(
             new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged));
          super.Dispose(disposing);
       }
    
  6. Appuyez sur F5 pour exécuter l'application.

Communication d'informations importantes par d'autres moyens que le son

Dans cette application, aucune information n'est communiquée uniquement par le son. Si vous utilisez le son dans votre application, vous devez aussi indiquer les informations via d'autres moyens de communication.

Pour indiquer des informations par d'autres moyens que le son

  1. Faites clignoter la barre de titre en utilisant la fonction API Windows FlashWindow. Pour obtenir un exemple de l'appel de fonctions API Windows, consultez Procédure pas à pas : appel des API Windows.

    Remarque :

    L'utilisateur peut avoir activé le service Windows SoundSentry, lequel fait lui aussi clignoter la fenêtre lorsque des sons système sont lus par le haut-parleur intégré de l'ordinateur.

  2. Affichez les informations importantes dans une fenêtre non modale de telle manière que l'utilisateur puisse y répondre. Pour plus d'informations, consultez Affichage modal et non modal des Windows Forms.

  3. Affichez un message qui acquiert le focus clavier. Cette méthode est à proscrire dans les cas où l'utilisateur est susceptible de taper des données.

  4. Affichez un indicateur d'état dans la zone de notification d'état de la barre des tâches. Pour plus d'informations, consultez Ajout d'icônes d'application à la barre des tâches à l'aide du composant NotifyIcon Windows Forms.

Test de l'application

Avant de déployer l'application, vous devez tester les fonctionnalités d'accessibilité que vous avez implémentées.

Pour tester les fonctionnalités d'accessibilité

  1. Pour tester l'accès par le clavier, débranchez la souris puis, dans l'interface utilisateur, naviguez vers chaque fonctionnalité en utilisant seulement le clavier. Vérifiez que toutes les tâches peuvent être exécutées à l'aide du seul clavier.

  2. Pour tester la prise en charge du contraste élevé, cliquez sur l'icône Options d'accessibilité dans le Panneau de configuration. Cliquez sur l'onglet Affichage et activez la case à cocher Utiliser le contraste élevé. Naviguez vers tous les éléments de l'interface utilisateur pour vérifier que les modifications de couleur et de police ont bien été prises en compte. Vérifiez également que les images et les motifs placés en arrière-plan du texte sont bien omis.

    Remarque :

    Le Panneau de configuration Windows NT 4 ne contient pas d'icône Options d'accessibilité. Cette procédure de modification de la valeur de SystemInformation.HighContrast ne fonctionne donc pas sur Windows NT 4.

  3. D'autres outils sont mis à votre disposition pour vous permettre de tester l'accessibilité d'une application.

  4. Pour tester l'exposition du focus clavier, exécutez la Loupe. (Pour ce faire, cliquez sur le menu Démarrer, pointez sur Programmes, sur Accessoires, sur Accessibilité, puis cliquez sur Loupe). Naviguez dans l'interface utilisateur en utilisant à la fois la touche de tabulation du clavier et la souris. Vérifiez que tous les déplacements sont correctement rendus dans la Loupe.

  5. Pour tester l'exposition des éléments de l'écran, exécutez Inspect, puis déplacez-vous vers chaque élément en utilisant la souris et la touche TAB. Vérifiez que les informations affichées dans les champs Name, State, Role, Location et Value de la fenêtre Inspect pour chaque objet de l'interface utilisateur sont significatives pour l'utilisateur. Inspect est installé avec le Kit de développement (SDK) Microsoft® Active Accessibility®, disponible à l'adresse https://msdn.microsoft.com/library/default.asp?url=/downloads/list/accessibility.asp.