Procédure pas à pas : création d'une application Windows accessible
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 la conception d'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 dans Visual Basic ou Visual C#. 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.
Notes
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
Texte
Pizza Order Form
PictureBox
Nom
logo
AccessibleDescription
A slice of pizza
AccessibleName
Company logo
Image
Any icon or bitmap
Étiquette
Nom
companyLabel
Texte
Good Pizza
TabIndex
1
AccessibleDescription
Company name
AccessibleName
Company name
BackColor
Bleu
Forecolor
Yellow
Taille de police
18
Étiquette
Nom
customerLabel
Texte
&Name
TabIndex
2
AccessibleDescription
Customer name label
AccessibleName
Customer name label
UseMnemonic
True
TextBox
Nom
customerName
Texte
(aucun)
TabIndex
3
AccessibleDescription
Customer name
AccessibleName
Customer name
GroupBox
Nom
sizeOptions
AccessibleDescription
Pizza size options
AccessibleName
Pizza size options
Texte
Pizza size
TabIndex
4
RadioButton
Nom
smallPizza
Texte
&Small $6.00
Activée
True
TabIndex
0
AccessibleDescription
Small pizza
AccessibleName
Small pizza
RadioButton
Nom
largePizza
Texte
&Large $10.00
TabIndex
1
AccessibleDescription
Large pizza
AccessibleName
Large pizza
Étiquette
Nom
toppingsLabel
Texte
&Toppings ($0.75 each)
TabIndex
5
AccessibleDescription
Toppings label
AccessibleName
Toppings label
UseMnemonic
True
CheckedListBox
Nom
toppings
TabIndex
6
AccessibleDescription
Available toppings
AccessibleName
Available toppings
Items
Pepperoni, Sausage, Mushrooms
Button
Nom
order
Texte
&Order
TabIndex
7
AccessibleDescription
Total the order
AccessibleName
Total order
Button
Nom
cancel
Texte
&Cancel
TabIndex
8
AccessibleDescription
Cancel the order
AccessibleName
Cancel order
MainMenu
Nom
theMainMenu
MenuItem
Nom
fileCommands
Texte
&File
MenuItem
Nom
exitApp
Texte
E&xit
Votre formulaire devrait ressembler à ceci :
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é
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; } }
Appelez la procédure SetColorScheme dans le constructeur de formulaire (Public Sub New() dans Visual Basic et public class Form1 dans Visual C#). 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(); }
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(); }
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); }
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.
Notes
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 ); }
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
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.
Notes
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.
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.
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.
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é
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.
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.
Notes
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.
D'autres outils sont mis à votre disposition pour vous permettre de tester l'accessibilité d'une application.
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.
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.