Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour...

27
Insérer à la page 281 du manuel « Visual Basic 2005 – Introduction », version 3.0 Copyright © 2004-2006 Jacques Bourgeois Ce document est un ajout au manuel que nous fournissons avec notre cours d’introduction à Visual Basic. Il est incomplet sans le manuel original. Toute reproduction ou utilisation en dehors de ce contexte est interdite à moins d’autorisation écrite de Jacques Bourgeois ([email protected])

Transcript of Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour...

Page 1: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Insérer à la page 281 du manuel « Visual Basic 2005 – Introduction », version 3.0

Copyright © 2004-2006 Jacques Bourgeois

Ce document est un ajout au manuel que nous fournissons avec notre cours d’introduction à Visual Basic. Il est incomplet sans le manuel original. Toute reproduction ou utilisation en dehors de ce contexte est interdite à moins d’autorisation écrite de Jacques Bourgeois ([email protected])

Page 2: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Chapitre 7

Exploration

► Fichier de configuration

► « Snippettes » de code

► Application Console

► Macros

► Applications multilingues

► Création de fichiers d’aide

► Utilisation d’un service Web

Page 3: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 283

Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts qui pourraient s’avérer utile. Il n’a pas toujours été facile de faire un choix, mais nous avons privilégié les aspects de Visual Basic qui sont utilisés le plus couramment par presque tous les programmeurs.

Le logiciel contient pourtant plusieurs outils que nous aurions aimé avoir le temps de couvrir, et nous pensons qu’il est important de vous donner au moins un minimum d’information pour que sachiez où vous diriger pour l’utilisation de ces concepts.

Les programmeurs qui ont à faire des trucs comme des applications fonctionnant en mode console (sans interface graphique) ou multilingues ont aussi intérêt à avoir une idée de ce qui est disponible dans .NET.

C’est le but de ce chapitre.

Fichier de configuration

Vous pouvez définir certaines propriétés des éléments d’interface en activant Application Settings (Dynamic Properties dans la version 2003) des propriétés d’un formulaire ou d’un contrôle. Ces entrées sont enregistrées dans le fichier visible app.config. Vous pouvez par la suite modifier ce fichier manuellement (attention, c’est du XML et ça demande d’avoir quelques notions de base), avant ou après la compilation. Les formulaires ajusteront les propriétés définies de cette façon à partir du fichier chaque fois que l’application sera lancée.

À la compilation, ce fichier est copié dans le dossier de compilation sous le nom de l’application suivi de l’extension .config. Dans notre exemple, ça donne PhotoCat.exe.config. Le fichier est en lecture seule1, et accessible au travers d’une série de classes définies dans le namespace System.Configuration.

2002-2003 Ce qui suit ne s’applique qu’à la version 2005. Le système était tellement limité dans les anciennes versions que la plupart des programmeurs définissaient leur propre système de fichier de configuration.

Dans l’environnement de développement de la version 2005, vous pouvez définir des entrées supplémentaires, propres à l’application entière, dans l’onglet Settings des propriétés de projet (page 86). Ces entrées sont enregistrées dans le fichier caché My Project\Settings.settings.

À la compilation, ce fichier est combiné à app.config, et c’est le résultat de la combinaison qui se retrouve dans le fichier .config.

1 Vous pouvez tenter d’écrire dedans en utilisant un mécanisme autre que les classes System.Configuration, mais il doit être localisé dans le dossier de l’application, qui est généralement Program Files et en lecture seule pour bien des utilisateurs.

Page 4: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 284

Notez que l’interface de Settings demande de définir un scope au niveau de l’application ou de l’utilisateur. À la compilation, les entrées sont séparées dans deux sections distinctes du fichier de configuration : <applicationSettings> et <userSettings>.

Les données de configuration de l’application seront partagées par tous les utilisateurs. Elles sont conservées dans le fichier de configuration est sont en lecture seule. Un administrateur à l’aise en XML peut cependant ouvrir ce fichier et y faire les changements requis.

La première fois qu’un utilisateur donné lance l’application, la section <userSettings>2 est copiée dans un fichier user.config créé dans un répertoire au nom très long et assez cryptique, localisé dans la configuration de l’utilisateur. Cette configuration utilisateur peut être ensuite être lue ou modifiée par le code.

Le nom du dossier est dépendant d’une série de facteurs. Pour notre application, dans un environnement Windows XP, ça donne ceci (représenté sur plusieurs lignes pour le rendre plus facile à décortiquer) :

C:\Documents and Settings\ Jacques\ Local Settings\Application Data\ JBFI\ PhotoCat.exe_StrongName_zzgeyxfma2100lounzgbrfzdlmxqq2oc\ 4.0.40.0\ user.config.

Jacques est le nom de l’utilisateur.

JBFI est le nom de la compagnie ayant créé le projet, tel que défini sous Company dans les propriétés de projet (voir page 28).

Suit ensuite le nom de l’application, suivi d’un code qui est probablement dépendant de la clé publique du fichier utilisé pour la signature électronique de l’application (voir page 241).

4.0.40.0 est le numéro de version de l’application, tel que défini dans les propriétés de projet.

Important Attention lors des mises à jour. Ce répertoire est dépendant du numéro de version de l’application, et les valeurs d’une version antérieure ne sont pas transférées quand vous faites une mise à jour de l’application. Vous voudrez peut-être modifier ce comportement en créant votre propre classe. Le concept est discuté dans la section Advanced Settings de la page Using My.Settings in Visual Basic 2005 de l’aide en ligne.

Vous pouvez très facilement accéder aux deux fichiers de configuration au travers de la classe My.Settings.

2 Qui est en fait un défaut utilisé pour créer une nouvelle configuration pour chaque utilisateur qui démarre l’application.

Page 5: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 285

Dans notre application d’exemple, nous utilisons souvent l’entrée DossierCourant de la configuration pour enregistrer et déterminer le dernier répertoire dans lequel l’utilisateur a travaillé :

My.Settings.DossierCourant = dossier.FullName lblDossier.Text = My.Settings.DossierCourant

En haut de la fenêtre permettant de définir les entrées par défaut, vous pouvez créer et gérer des profils. Un profil est simplement un groupe de données. Par exemple, vous utilisez peut-être une base de données différente dans l’environnement de développement et en production. Or la chaîne de caractères servant à spécifier une connexion est souvent enregistrée dans le fichier de configuration. Vous pourriez donc avoir deux profils, un pour l’environnement de développement et un autre pour la production.

Les profils sont conservés dans les propriétés du projet, et c’est le profil actif (Current profile) qui est utilisé à chaque compilation pour définir les entrées présentes dans le fichier de configuration. Vous n’avez donc qu’à choisir le bon avant de lancer l’application dans l’environnement de développement et/ou compiler l’application finale.

« Snippettes » de code

Vous arrive-t-il de réutiliser des petits bouts de code, projet après projet, toujours les mêmes, que vous retapez ou copiez-collez sans arrêt, ouvrant et fermant sans cesse des vieux projets pour les récupérer?

Visual Studio à la rescousse.

En anglais, on appelle ces petits bouts de code des snippets. Le grand dictionnaire terminologique de l’Office de la langue française n’offrant pas de traduction, nous allons nous faire plaisir et appeler ça une snippette.

Pour les trucs que vous utilisez vraiment souvent, vous pouvez simplement sélectionner un bout de code, plusieurs lignes au besoin, et faire glisser la sélection vers l’onglet General du Toolbox.

Le menu contextuel du Toolbox vous permet de renommer une entrée, ce qui la rend généralement plus facilement identifiable.

Les bouts de code sont accumulés dans votre environnement et deviennent disponibles dans tous vos projets.

Page 6: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 286

Pour réutiliser le code, placez simplement le curseur à l’endroit désiré dans la fenêtre de code et faites un double clic sur l’entrée appropriée.

2002-2003 Vous êtes limités à ce truc du Toolbox. L’outil de gestion des snippettes présenté ci-dessous n’existait pas dans les anciennes versions.

Très utile si vous avec une douzaine de snippettes, mais si vous êtes un collectionneur, votre Toolbox va devenir éventuellement un fouillis incroyable.

Pour des snippettes plus complexes, demandant d’ajuster certains paramètres du code à chaque fois, ça peut aussi vous laisser beaucoup de travail répétitif ou causer des petits bogues subtils si vous oubliez de changer un des paramètres.

Visual Studio 2005 possède un nouvel outil qui permet de gérer les snippettes et de présenter des options supplémentaires au moment de coller les bouts de code : le Code Snippets Manager. Il est accessible par le menu Tools, et contient déjà plusieurs centaines de snippettes fournies gracieusement par Microsoft.

Vous noterez que l’interface vous permet d’importer des snippettes ou même d’en trouver en ligne. Vous en aurez bientôt des milliers. Plus jamais besoin d’écrire de code, y’aura toujours une snippette à quelque part ☺.

Vous insérez une snippette dans votre code par l’option Insert Snippet du menu contextuel de la fenêtre de code.

Si vous êtes amateur, fouillez dans l’aide en ligne. L’outil offre une série de possibilités qui ne sont pas nécessairement apparentes à première vue, comme par exemple des options pour filtrer les snippettes.

Page 7: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 287

Ajouter vos propres snippettes est cependant plus complexe que de simplement copier du code. C’est fait dans des fichiers XML qui doivent être formatés et sauvés de façon à pouvoir être reconnus et interprétés par l’outil. La rubrique Creating Code Snippets de l’aide en ligne vous mènera aux informations appropriées.

Application Console

Une application console est un programme qui fonctionne dans une fenêtre texte, comme les vieilles applications DOS. Il y a relativement peu d’usages pour ce type d’application, mais comme elles demandent très peu de ressources, elles peuvent devenir intéressantes pour des petites applications d’entretien.

Elles compilent et exécutent très rapidement, et sont donc aussi souvent utilisées dans les livres et articles pour faire la démonstration de concepts simples.

Vous créez une application console tout simplement en sélectionnant Console Application lors de la création d’un nouveau projet. À partir de ce moment, vous disposez d’un objet Console qui possède une série de méthodes permettant d’écrire et lire dans la fenêtre de texte qui est générée dès que vous utilisez cet objet.

Le projet DemoConsole, que vous trouverez dans le dossier Exemples supplémentaires du CD de cours démontre l’utilisation de cet objet.

Sub Main()

Dim strNom As String

Console.WriteLine("Bonjour! Quel est votre nom?") strNom = Console.ReadLine

Console.WriteLine("Bienvenue " & strNom & ".")

Console.ReadLine() 'Nécessaire, sinon la console ferme

End Sub

Macros

Si vous voulez automatiser des tâches répétitives dans l’environnement Visual Basic .NET, vous pouvez créer des macros, comme vous le faites peut-être déjà dans Word et Excel. Tout comme dans Office, vous pouvez même lancer un outil qui enregistrera les opérations que vous ferez dans l’interface .NET et générera le code correspondant à vos actions : l’enregistreur de macros.

Ces macros sont enregistrées en Visual Basic .NET dans un projet portant l’extension vsmacros au lieu du vbproj habituel.

Page 8: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 288

Microsoft nous fournit une interface séparée pour travailler dans les macros, probablement un précurseur de VSA (Visual Studio for Applications) qui devrait éventuellement remplacer VBA (Visual Basic for Applications) comme langage de macro dans les futures versions d’Office. Cette interface est similaire à celle de Visual Studio, alors vous devriez vous y retrouver très facilement. Elle est seulement un peu plus limitée.

Nous vous fournissons un projet contenant deux macros que nous utilisons régulièrement dans notre développement.

AjusteVersion lit la première ligne de la fenêtre de code courante et isole le numéro de version du fichier et de la date. Si la date est celle du jour ou si le document n’a pas été modifié depuis sa dernière sauvegarde, on ne fait rien. Autrement, le numéro de version est incrémenté et la date ajustée à la date du jour.

Nous utilisons InsertBrackets dans nos projets C# 3 pour créer automatiquement les structures { – retour de ligne – retrait – retour de ligne – } qui y sont omniprésentes, mais qui ne sont pas générés automatiquement pas l’environnement de développement qui en fait beaucoup moins que celui de Visual Basic.

Vous trouverez ces macros dans Exemples supplémentaires\Macros\JBFIMacros.vsmacros.

Activer une macro

⇒ Pour pouvoir utiliser cette macro, vous devez tout d’abord référencer le projet par Tools►Macros...Load Macro Project et pointer à JBFIMacros.vsmacros dans le dossier Exemples supplémentaires\Macros des exemples de cours.

⇒ Ouvrez une fenêtre de code de notre application d’exemple.

⇒ Si la fenêtre listant les macros n’est pas visible, affichez-la par ALT-F8 ou Tools►Macros...Macro Explorer.

⇒ Naviguez jusqu’à la macro AjusteVersion et activez-la par l’option Run de son menu contextuel.

⇒ Pour voir le code de la macro, activez Edit dans son menu contextuel.

Vous constaterez que c’est du code Visual Basic bien standard. Nous y faisons cependant beaucoup référence à l’objet DTE (Development Tools Extensibility) qui est notre interface avec l’environnement de développement.

3 Oui, nous trichons parfois. Même si nous préférons de beaucoup Visual Basic, certains clients insistent sur le C#, généralement parce que les programmeurs qui auront à maintenir le code ont une expérience en C ou en Java.

Page 9: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 289

Menus

Vous pouvez aussi facilement assigner vos macros à l’un des menus ou une barre d’outils de Visual Basic. Elles sont disponibles dans une entrée Macros sous l’onglet Command de la boîte de personnalisation des barres d’outils.

Enregistrer une macro

⇒ Lancez l’enregistreur de macro par Tools►Macros...Record Temporary Macro.

⇒ Toutes les opérations que vous effectuez à partir de ce moment sont enregistrées et du code Visual Basic est généré au fur et à mesure.

⇒ Quand vous avez fini, activez le bouton Stop Recording dans la barre d’outils d’enregistrement.

Le code généré se retrouve dans une macro appelée TemporaryMacro dans le module RecordingModule.

Important La macro enregistrée dans TemporaryMacro est écrasée chaque fois que vous relancez l’enregistreur. Assurez-vous de la copier dans un autre module de votre projet de macros si vous voulez la conserver.

Applications multilingues

On peut aborder le développement d’applications multilingues de plusieurs façons.

Si vous compilez séparément les différentes versions « internationales » de l’application, vous pouvez travailler avec des modules de constantes qui peuvent être interchangés d’une compilation à l’autre ou contrôlés par des variables de compilation conditionnelle. En définissant tout le texte affiché dans l’application dans des constantes, changer le module change la langue.

Une autre technique classique, étant donné que la majorité des applications font appels à des données, est d’enregistrer tout le texte affiché dans l’application dans des fichiers textes ou XML, ou dans une table de la base de données utilisée. L’avantage de cette approche par rapport à la précédente est qu’elle permettrait de changer le texte ou ajouter des langues sans avoir à recompiler l’application.

Page 10: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 290

C’est cependant un travail considérable d’avoir à ajouter une ligne pour lire la constante définissant le texte à afficher dans tous les contrôles d’une application. C’est aussi relativement inefficace si vous voulez avoir une application unique qui changera de langue soit en fonction d’un choix de l’utilisateur, soit par rapport à certains éléments de l’environnement comme la version ou la configuration de Windows au moment de l’exécution. Il en est de même pour un dll s’ajustant automatiquement à la langue de l’application qui l’appelle.

Par ailleurs, lorsqu’on parle de localisation ou de culture4, le texte affiché à l’écran n’est pas toujours la seule considération. Parce que le texte anglais et le texte français ne prennent pas le même espace à l’écran, les dimensions de certains contrôles doivent parfois être ajustées d’une langue à l’autre. Les icônes, fichiers sonores et certains autres éléments de l’application peuvent aussi changer d’un environnement culturel à l’autre. Les bases de données et les fichiers se prêtent mal, voire pas du tout à ces types d’adaptations.

Microsoft a donc développé un autre mécanisme spécifiquement conçu pour faciliter les changements de culture. C’est l’approche recommandée pour concevoir des applications internationales : les fichiers de ressources.

Le compilateur et le CLR ayant été conçus pour travailler avec ces fichiers, leur utilisation est optimisée et donc généralement plus performante que celle d’une base de données ou d’un fichier conventionnel.

Dans les anciennes versions de Visual Basic, bien qu’ils fussent très versatiles, ils étaient peu utilisés parce que ça demandait un travail considérable de la part du programmeur5.

Avec la mondialisation, les applications multilingues sont de plus en plus fréquentes, même à l’intérieur d’une entreprise, alors Microsoft a raffiné les mécanismes pour les rendre plus conviviaux, particulièrement dans les formulaires qui sont l’endroit où il y a le plus d’éléments d’affichage. Comme vous allez le voir plus loin, ils en ont encore rajouté dans la version 2005, où l’utilisation des fichiers de ressources est encore plus simple, au point d’être presque automatique.

4 « Localisation » est le terme employé dans le monde Windows, et il est parfois utilisé dans le contexte de .NET, où Microsoft parle cependant plus volontiers de « culture ». 5 Si nous prenons la peine de préciser que les ressources sont maintenant identifiées par du texte plutôt que par une valeur numérique, certains participants vont pousser un grand soupir de soulagement.

Si nous ajoutons que vous pouvez maintenant voir le résultat de l’utilisation des ressources dans un formulaire sans avoir à lancer l’application, et voir l’affichage final dans toutes les langues directement dans l’environnement de développement uniquement en choisissant la langue à tester dans une liste déroulante, les mêmes programmeurs vont se mettre à pleurer de joie.

Ceux qui ont présentement des larmes aux yeux dans la salle de cours faisaient usage des fichiers de ressources dans Visual Basic 6.

Page 11: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 291

Important On recommande d’utiliser les fichiers de ressources pour toutes les applications, même celles qui ne sont pas bilingues. Si, du jour au lendemain, on vous demande une version dans une langue différente, la conversion sera, dans la plupart des cas, uniquement une question de faire traduire des fichiers.

Concepts

Fichiers de ressources

Les fichiers de ressource sont dans un premier temps des documents en format XML, possédant généralement l’extension .resx. Ils peuvent contenir à peu près n’importe quel type d’information (texte, images, sons, etc.). En ce qui concerne le texte, ils peuvent être facilement convertis en fichiers texte (.txt) standard si vous avez besoin de les traiter dans un environnement différent de celui d’un programmeur, chez un traducteur par exemple. Une application appelée Resgen (page 301), fournie avec Visual Studio, s’occupe des conversions d’un format à l’autre.

Vous créez un fichier de ressource distinct pour chaque langue. L’un d’entre eux contient la langue par défaut de l’application et porte le nom <Application>.resx. Les autres portent le même nom, mais avec une extension permettant d’identifier la langue. Par exemple :

PhotoCat.resx contient les éléments utilisés dans la version française.

PhotoCat.en.resx contient les éléments anglais.

Vous pouvez aussi spécifier des particularités régionales. Par exemple, si votre application est utilisée au Québec et en France, vous pourriez décider d’utiliser les 3 fichiers de ressources suivant :

PhotoCat.resx contient les éléments communs aux deux cultures.

PhotoCat.fr-CA.resx 6 contient les éléments propres au Québec.

PhotoCat.fr-FR.resx contient les éléments propres à la France.

La langue par défaut est souvent appelée langue neutre ou invariant. Toutes les autres langues sont dites satellites.

Une même application peut contenir les données d’une langue donnée dans plusieurs fichiers de ressources distincts, qui seront recombinés à la compilation. Si vous utilisez tel quels les outils fournis dans l’environnement, Visual Studio crée, pour chaque langue, un fichier pour chaque formulaire, et un fichier global contenant le texte à utiliser ailleurs, comme par exemple dans les MessageBox.

6 L’extension à utiliser répond à des normes internationales et est sensible à la casse. Vous trouverez les codes dans l’aide en ligne de la classe CultureInfo.

Page 12: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 292

Compilation

À la compilation, les données des fichiers de la langue neutre sont incorporées dans l’assemblage.

Les données des autres langues sont compilées dans des dll satellites, un par langue. Cette dernière possibilité permet entre autres d’ajouter des langues sans avoir à recompiler l’assemblage. Il suffit de créer un nouveau dll satellite. Ces dll portent généralement tous le même nom, mais sont localisés dans des répertoires distincts, sous celui de l’assemblage après la compilation.

Le projet JBLib fourni avec les exemples de cours est un dll bilingue. Si vous explorez les dossiers de compilation, sous bin, vous verrez que le compilateur a créé un sous-dossier en, contenant un fichier JBLib.resources.dll, notre satellite anglais, qui est le résultat de la compilation de tous les fichiers .en.resx du code source.

Détermination de la langue

Si vous ne spécifiez rien dans le code, la langue d’exécution par défaut des applications est celle du système d’opération. Vous pouvez cependant spécifier une langue alternative dans le code (page 297).

Si cette langue est disponible dans l’application, c’est elle qui sera utilisée. Sinon, la langue invariante sera utilisée.

La librairie de classes JBLib de nos exemples est en français par défaut, mais possède un satellite anglais (en). Elle s’adaptera automatiquement aux applications françaises et anglaises, mais roulera en français si on l’appelle à partir d’une application espagnole.

Ressources communes

Supposons les ressources suivantes :

Langue Ressource

Neutre - défaut (Québec)

fr-FR (France)

en (Canada)

en-UK (Angleterre)

BoutonOK OK BoutonQuitter Quitter Quit MotCouleur Couleur Color Colour Drapeau (fleurdelys.bmp) (trifolié.bmp) (redleaf.bmp) (unionjack.bmp)

Vous noterez que sauf pour la langue neutre, les fichiers de ressources ne définissent pas toutes les ressources. Il serait répétitif d’avoir à définir le texte du bouton OK dans chacun des fichiers, étant donné qu’il est toujours identique. On peut alors se contenter de le définir dans le fichier de ressources par défaut.

Pour éviter la redondance, le système utilise une recherche hiérarchique (fallback) à l’intérieur des fichiers de ressources pour trouver le texte à afficher.

Page 13: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 293

Si l’application est lancée dans la version UK de Windows, celle utilisée en Angleterre, chaque fois qu’elle demandera d’utiliser une ressource, le système ira voir si cette entrée existe dans le fichier en-UK, et l’utilisera le cas échéant. Les anglais verront donc apparaître le bon drapeau dans notre exemple.

Le mot « couleur » s’écrivant différemment en Angleterre, il a été redéfini dans en-UK et c’est lui qui sera utilisé.

Si la ressource n’est pas définie dans le fichier « régional », .NET on va voir dans le fichier générique pour la langue (en). Le libellé d’un bouton « Quitter » ne changeant pas, on l’a défini uniquement dans le fichier générique, et c’est l’entrée anglaise par défaut qui sera utilisée. Qu’on soit au Canada ou en Angleterre, on aura un bouton Quit.

Vous comprenez ce qui va arriver pour un bouton OK ? N’étant pas défini dans en-UK, on retombe sur en, et puisqu’il ne contient pas non plus de définition pour le bouton OK, c’est l’entrée de la culture neutre qui est finalement utilisée.

Le texte ne changeant pas entre la France et le Québec, tous les appels pour du texte en France retomberont sur le texte défini pour le Québec. Le système détectera cependant la différence pour le drapeau.

Maintenant que nous sommes à l’aise avec les concepts, allons-y avec des exemples réels d’application et d’utilisation.

Ressources dans les formulaires Les formulaires servant à l’affichage, ils sont les plus grands consommateurs de ressources. Nous allons donc commencer eux. Pour ceux qui ont travaillé avec des fichiers de ressources dans les anciennes versions de Visual Basic, c’est ici que vous pousserez le plus grand soupir de soulagement.

⇒ Créez tout d’abord les formulaires de la façon habituelle, en définissant, dans la propriété Text des contrôles, le texte de la langue par défaut. Assumons que c’est le français pour les besoins de la discussion.

Les formulaires utilisent déjà des fichiers de ressources pour certaines de leurs opérations courantes7. À moins d’avoir incorporé des images dans le formulaire dans l’environnement de développement, ces fichiers ne contiennent pas grand-chose, si ce n’est de l’information pour l’environnement de développement, comme par exemple la position des contrôles dans le Control tray, cette bande sous le formulaire qui permet de travailler avec les contrôles qui n’ont pas de représentation directe à l’écran, comme les Timer.

7 Ils ne sont pas visibles par défaut dans l’environnement de développement. Vous pouvez activer le bouton Show All Files en haut du Solution Explorer pour qu’ils deviennent visibles sous le formulaire auquel ils correspondent.

Page 14: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 294

⇒ Si vous réglez la propriété Localizable d’un formulaire à True, ce fichier devient votre fichier de ressources pour la langue par défaut dans le formulaire. L’environnement de développement s’occupe de tout, en copiant dans ce fichier le contenu des propriétés pouvant être influencées par la langue, particulièrement la valeur de la propriété Text et la position de tous les contrôles :

<data name="btnStop.Text"> <value xml:space="preserve">Arrê&amp;t</value> </data>

<data name="btnStop.Location" type="System.Drawing.Point> <value>500, 499</value> </data>

⇒ Passez à la propriété Language et sélectionnez une langue alternative, par exemple English. Notez que si vous n’aviez pas touché à la propriété Localizable préalablement, elle serait automatiquement mise à True sans votre intervention en spécifiant une langue autre que le (Default).

Visual Studio crée pour le formulaire un nouveau fichier de ressources portant le nom du formulaire avec l’extension pour la langue sélectionnée : en.resx pour l’anglais, ou si vous avez été spécifié la région en plus de la langue, quelque chose comme en-US.resx pour anglais / États-Unis.

À cause du mécanisme de recherche des ressources expliqué plus tôt (section Ressources communes), ce nouveau fichier ne contient rien de particulier. C’est d’ailleurs visible dans le formulaire, qui a toujours son texte français.

⇒ Traduisez en anglais le texte apparaissant dans le formulaire. Redimensionnez et déplacez les contrôles au besoin.

La valeur des propriétés Text, Size et Location des contrôles modifiés est enregistrée dans le fichier de ressources anglais.

⇒ Faites repasser la propriété Language au (Default), et le formulaire reprend son affichage original pour la version française. Repassez à l’anglais, l’affichage vous suit.

Quand l’application sera lancée « pour de vrai », elle s’ajustera de la même façon à l’environnement de l’utilisateur par défaut, ou à la langue spécifiée dans le code comme nous verrons plus loin.

Créez autant de fichiers de ressources que nécessaire.

Important Nous avons vu plus tôt que la langue par défaut est à la base de toutes les autres, qui héritent des mêmes ressources tant qu’on ne les a pas redéfinies. Pour assurer que le défaut est toujours défini, l’environnement de développement vous obligera à être dans le (Default) quand vous voudrez ajouter des contrôles dans un formulaire Localizable.

Page 15: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 295

Le formulaire FormTests de PhotoCat est localisé.

2002-2003 Dans les anciens exemples, le formulaire frmApercu du projet PhotoCatIntro démontre le principe, mais sur un seul bouton.

Ressources pour l’application

2002-2003 La gestion des fichiers de ressources autres que ceux des formulaires était très différente dans l’ancienne version. Veuillez consulter la section équivalent de l’ancien manuel de cours, que vous trouverez en format PDF dans les dossiers VS2002 et VS2003 du CD d’accompagnement.

Tout ça est bien beau pour les formulaires, mais qu’en est-il des autres éléments d’interface, comme par exemple le texte affiché dans les MessageBox?

Vous devrez alors créer des fichiers de ressources indépendants des formulaires. On a généralement pour chaque langue un fichier global qui est utilisé par toute l’application.

Création des fichiers de ressources

Le fichier de ressource de l’application pour la langue par défaut est créé automatiquement pour vous. Il est localisé dans le dossier My Project et s’appelle Resources.resx.

En autant que le fichier n’aie pas été renommé, vous pouvez définir les ressources qu’il contient par l’onglet Resources des propriétés du projet (page 76). Vous pouvez aussi forcer l’affichage des fichiers cachés dans le Solution Explorer et faire un double clic sur le fichier.

⇒ Définissez-y individuellement toutes les chaînes de caractères utilisées dans l’application, tout en donnant à chacune un nom qui servira à la référencer dans le code.

Page 16: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 296

Notez que vous pouvez aussi définir des ressources autres que du texte, en sélectionnant le type de ressource dans la liste déroulante en haut à gauche.

⇒ Pour créer un fichier dans une autre langue (opération généralement faite vers la fin du développement si vous voulez optimiser votre emploi du temps), copiez simplement le fichier par défaut en renommant la copie avec une extension définissant le langage. Ainsi, pour l’anglais, vous aurez Resources.en.resx.

⇒ Ouvrez ce fichier par un double clic. Conservez les mêmes noms de ressources, mais traduisez le texte dans la colonne Value. Pour les entrées qui n’ont pas à être traduites, comme par exemple, dans un fichier anglais, l’entrée msgDate dans la prise d’écran ci-dessus, vous pouvez détruire la ligne. Le mécanisme de redondance expliqué plus tôt récupérera la valeur de la ressource française qui est la même.

⇒ La librairie JBLib est bilingue et utilise cette technique. Si vous demandez d’afficher tous les fichiers du projet, par le bouton Show All Files en haut du

Page 17: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 297

Solution Explorer, vous trouverez dans le dossier MyProject un fichier Resources.resx, le fichier français par défaut, éditable par l’onglet Resources de la fenêtre de propriétés, et Resources.en.resx, l’équivalent anglais, qui doit être ouvert directement pour être édité.

Spécifier la culture

Important La technique est différente pour les applications Web, ou la langue est normalement définie à partir de delle de la station client qui appelle la page. Les cours ASP discutent généralement des concepts permettant d’ajuster la langue dans une application Web.

Si vous ne faites rien, l’application utilise sa langue par défaut, soit les entrées des fichiers de ressource ne possédant pas le code de langue dans leur nom. Pour avoir une langue autre que la langue par défaut, vous devez spécifier la langue désirée dans le code.

Dans la version 2005, appelez simplement la méthode ChangeUICulture de l’objet My.Application, qui a été créé automatiquement au lancement de l’application. La ligne suivante force l’utilisation de l’anglais à cause du « en » passé comme paramètre :

My.Application.ChangeUICulture("en")

Cette commande est un raccourci pour vous faciliter les choses. Elle camoufle le vrai mécanisme, qui offre certaines possibilités supplémentaires, comme d’ajuster la culture au panneau de configuration ou à la langue de Windows.

Dans toutes les versions de Visual Basic, on peut donc en faire un peu plus en changeant la langue de la « vraie » façon.

La notion de culture s’applique en fait au thread courant, pas vraiment à l’application elle-même. Pour la majorité des programmes, qui ne font pas implicitement appel à des threads séparé, application et thread courant reviennent au même.

Vous redéfinissez la culture en changeant la propriété System.Threading.Thread.CurrentThread.CurrentUICulture :

Imports System.Globalization Imports System.Threading.Thread

'Français CurrentThread.CurrentUICulture = New CultureInfo("fr-CA")

'Anglais CurrentThread.CurrentUICulture = New CultureInfo("en-US")

'Invariant (culture par défaut de l'application) CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture

'Panneau de configuration CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture

'Version de Windows CurrentThread.CurrentUICulture = CultureInfo.InstalledUICulture

Page 18: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 298

Important Les dll roulant par défaut dans le même thread que l’application, ils s’adapteront automatiquement à la langue spécifiée dans l’application, en autant qu’ils aient été conçus pour cette langue. Autrement, ils retomberont dans leur propre langue par défaut.

Utilisation des ressources : My.Resources Dans la version 2005, accéder aux ressources dans le code est un jeu d’enfants. VB a créé pour vous une classe qui fait tout le travail8. Il suffit d’appeler My.Resources pour accéder aux valeurs définies dans le fichier de ressources :

Dans JBLib, la ressource msgSqlServer est défini comme Information SQL Server étendue : dans le fichier de ressources par défaut, et SQL Server extended information: dans le fichier anglais.

Dans notre illustration, la valeur retournée par My.Resources.msgSqlServer et assignée à X changerait donc en fonction de la langue spécifiée pour l’environnement.

Utilisation des ressources : ResourceManager Si vous tenez à avoir un peu plus de contrôle que n’en donne My.Resources, ou si vous êtes sur la version 2003, vous utilisez un objet appelé un ResourceManager, qui est, comme plusieurs des objets rattachés à la culture, défini dans le namespace System.Globalization.

Microsoft suggère d’en instancier un dans chaque procédure où vous avez besoin des ressources, mais comme cet objet est généralement appelé de partout dans votre application, c’est un des rares qui est souvent déclaré globalement, comme une variable publique dans un module :

Public RM As New Resources.ResourceManager _ ("PhotoCat.Resources", GetType(PhotoCat).Assembly)

8 Pour les curieux, elle est cachée dans MyProject\Resources.Designer.vb.

Page 19: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 299

Le premier paramètre est une combinaison du namespace de l’application (défini dans le premier onglet des propriétés du projet), suivi du nom du fichier contenant la culture de base sans l’extension .resx.

Dans la version 2005, utilisez simplement celui qui est utilisé par My.Resources. Il est disponible par My.Resources.ResourceManager. Vous n’avez qu’à remplacer la variable RM par My.Resources.ResourceManager dans les exemples qui suivent.

La méthode GetString de cet objet est ensuite utilisée pour récupérer la ressource associée avec la culture actuellement définie dans l’application.

Me.Text = RM.GetString("frmBilingue") btnVide.Text = RM.GetString("btnVide") MessageBox.Show(RM.GetString("msgFermer"))

Il y a aussi une méthode GetObject qui permettrait de récupérer d’autres types de ressources comme par exemple les images.

Truc Si vous recevez une erreur vous disant que le fichier de ressources est introuvable lors de l’appel à GetString, c’est probablement que la référence donnée dans le premier paramètre du constructeur du ResourceManager n’est pas la bonne. Pour trouver le paramètre à passer, consultez le manifeste de votre assemblage en ouvrant le fichier .exe avec l’utilitaire ildasm.exe9. À la toute fin du manifeste, vous devriez trouver une entrée indiquant le nom du fichier de ressources (.mresource public PhotoCat.Resources.resources), qui vous indique le paramètre à passer.

Notez qu’un ResourceManager vous permet de spécifier directement la culture au moment de lire une ressource, en étant indépendant de la culture courante.

lblFrançais.Text = RM.GetString("lblLangue", New CultureInfo("fr-CA")) lblAnglais.Text = RM.GetString("lblLangue", New CultureInfo("en-US"))

Un exemple concret

2002-2003 Dans l’ancienne application d’exemple, que vous trouverez sur le CD dans VS2003\PhotoCatIntro.exe, le formulaire frmBilingue du projet PhotoCatIntro servait à démontrer le principe.

Le formulaire FormTests de PhotoCat est bilingue. L’application utilise en plus un dll JBLib qui est aussi bilingue. Voyons comment nous nous y prenons, dans l’application, pour passer du français à l’anglais.

⇒ Faites passez l’application en mode Test dans la liste de Solution Configurations dans la barre d’outils principale.

9 Accessible uniquement par une ligne de commande. Comme pour tous les outils sur ligne de commande, il est plus facile de l’appeler à partir du Command Prompt disponible par Start►Programs...MicrosoftVisual Studio...Visual Studio Tools.

Page 20: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 300

⇒ Dans cette application, comme c’est souvent le cas, la langue est spécifiée dans le fichier de configuration (page 283). Pour changer la langue, passez donc dans l’onglet Settings des propriétés du projet (page 86). Vous déterminez la langue en changeant la valeur de Langue, qui doit être « en » pour l’anglais ou « fr » pour le français.10

On change la langue au départ de l’application, donc dans la méthode Main du module PhotoCat :

My.Application.ChangeUICulture(My.Settings.Langue)

Cette ligne change la culture à la valeur définie dans l’entrée Langue de la configuration.

⇒ Lancez l’application. Le formulaire de tests s’affiche dans la langue sélectionnée.

Vous constaterez certains problèmes.

Par exemple, la largeur et la position de certains contrôles (en particulier la TextBox pour entrer la date en haut du formulaire) sont différentes entre la version française et la version anglaise. Ces différences sont enregistrées dans le fichier de ressources, et l’environnement de développement s’en sert, ajustant le formulaire entre les deux langues quand vous changez la propriété Language du formulaire dans Visual Studio.

Mais le code généré pour créer le formulaire n’en tient pas compte, de sorte que l’affichage du texte est incorrect en anglais, le Label étant trop petit. C’est probablement un oubli de Microsoft qui sera peut-être corrigé éventuellement11, mais vous devrez y mettre votre propre grain de sel en ajoutant votre propre code dans l’événement Load du formulaire, pour l’ajuster quand l’application est en anglais :

Private Sub FormTest_Load(…) Handles MyBase.Load

If My.Application.UICulture.TwoLetterISOLanguageName = "en" Then lblDate.Size = New Size(120, 16) lblDate.Location = New Point(41, 87) ... End If

End Sub

⇒ Activez le bouton [ErrMsg]. Il génère une erreur qui est traitée dans la librairie JBLib. Le message affiché provient du code de JBLib.dll. Comme cette librairie est bilingue, vous noterez qu’elle s’ajuste automatiquement à la langue de l’application.

10 Vous pouvez essayer d’autres langues, comme par exemple « ja » pour le japonais, mais comme l’application ne possède pas de fichier de ressources japonais, elle va automatiquement retomber sur la langue par défaut, le français. 11 Au moment d’écrire ces lignes, il n’y avait pas encore eu de Service Pack pour Visual Studio 2005.

Page 21: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 301

Resgen et autres utilitaires Le compilateur fait appel à un utilitaire Resgen.exe pour compiler les fichiers de ressources en dll.

Vous n’avez généralement pas besoin de faire vous-même appel à cet outil, mais il peut s’avérer utile dans certaines circonstances. Il permet entre autres de convertir votre fichier de ressources XML en fichier texte et vice versa. Si vous faites appel à un traducteur pour localiser vos applications, il est fort probable qu’il préférera travailler avec un fichier texte plutôt qu’avec un fichier XML.

Le dossier JBLib\My Project des exemples de cours contient un fichier Resources.txt qui a été généré avec la simple commande suivante, l’outil déterminant la conversion à faire en fonction des extensions de fichier :

Resgen Resources.resx Resources.txt

De retour de chez le traducteur, ce fichier peut être reconverti en XML ou même être compilé directement, simplement en inversant les paramètres de la commande.

Le gros défaut de ce type de conversion est qu’il est limité à des fichiers contenant du texte (pas d’images) et que vous perdez vos commentaires.

Si vous voulez utiliser les techniques discutées précédemment mais ne voulez pas avoir à « traîner » les ressources satellites, vous pouvez incorporer toutes les ressources dans l’exécutable en compilant manuellement le projet. Si ça vous intéresse, consultez l’aide en ligne pour le VBC (Visual Basic Compiler) et jetant un coup d’œil à l’option de compilation /resource. Si vous avez déjà dans votre collection de fichiers de ressources Windows (.res) provenant de vos anciennes applications Visual Basic 6, vous pouvez aussi les lier avec un assemblage .NET à partir d’une compilation sur la ligne de commande.

Formatage N’oubliez pas que la localisation d’une application n’est pas simplement une question de déterminer les images et le texte à afficher; il faut aussi s’organiser pour formater correctement les informations, particulièrement les dates et les chiffres.

L’affichage se fait par défaut en fonction du panneau de configuration. Si votre application permet, comme notre formulaire d’exemple, de sélectionner une culture différente, il faudrait que le formatage suive.

Dans un tel cas, modifiez non pas le CurrentUICulture, qui est utilisé par le ResourceManager, mais plutôt la CurrentCulture, qui spécifie les formats à utiliser dans le Thread. Nous devons vous avouer que nous n’avons pas eu le temps de « jouer » avec ce concept, alors soyez aux aguets pour de possibles effets secondaires.

Page 22: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 302

Répertoire de terminologie Microsoft publie un répertoire de ressources linguistiques, une référence intéressante si vous désirez développer des applications bilingues utilisant des termes plus facilement reconnus par les utilisateurs de Windows.

Vous y trouverez une série de documents contenant la terminologie utilisée par Microsoft dans les différentes versions internationales de ses propres logiciels.

Vous trouverez ces documents à ftp.microsoft.com/developer/msdn/newup/glossary/

Le fichier French.exe fait 12 Mo.

Création de fichiers d’aide

Important Nous n’avons pas eu le temps de « jouer » avec les fichiers d’aide dans la version 2005. Nous assumons que la discussion qui suit, écrite à partir de notre expérience dans les anciennes versions, devrait s’appliquer.

La création de fichiers d’aide n’est généralement pas l’affaire des programmeurs et est habituellement confiée à des rédacteurs techniques. Le programmeur doit cependant être impliqué, étant donné que c’est lui qui devra créer les liens entre l’application et le fichier d’aide. Nous considérons donc utile de vous donner un aperçu. Cette section est loin d’être exhaustive, mais devrait vous donner une idée des processus impliqués. Référez-vous à la documentation de l’outil que vous déciderez d’utiliser pour les détails.

Les fichiers d’aide peuvent avoir plusieurs formats, incluant les vieux fichiers .hlp utilisés du temps de Windows 3.1 et qu’on retrouve encore assez fréquemment aujourd’hui, et qui sont des fichiers RTF formatés de façon particulière et ensuite passé au travers d’un compilateur.

Les systèmes d’assistance en ligne modernes sont cependant presque tous conçus à partir de fichiers HTML qui, combinés à une série de fichiers de configuration12 en format texte ou XML, sont passés au travers d’un compilateur qui génère un fichier d’aide CHM, le format standard pour HTML Help 1.0. Un fichier CHM est simplement une combinaison, dans un format comprimé, de plusieurs fichiers HTML. Un système d’aide simple n’a cependant pas nécessairement à être comprimé et peut être distribué en fichiers HTML séparés.

Visual Studio utilise, en plus des fichiers CHM, des fichiers HXS, un nouveau format défini dans HTML Help 2.0.

12 Ces fichiers de configuration servent à créer les index et autres éléments de navigation et de recherche dans le système d’aide.

Page 23: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 303

Des fichiers d’aide séparés peuvent être combinés dans un seul système, ce qui permet une certaine extensibilité. Ainsi, si vous ajoutez des composantes ou des outils à votre environnement Visual Studio, leurs fichiers d’aide devraient normalement s’intégrer à l’aide en ligne que vous utilisez pour votre programmation Visual Basic.

Les fichiers d’aide sont habituellement créés avec des logiciels spécialisés comme RoboHelp (www.macromedia.com/software/robohelp) ou HelpStudio (www.innovasys.com/products/hs2/overview.asp). Ces logiciels sont cependant dispendieux (souvent autour de 1000 $ US), donc réservés à des professionnels qui doivent produire une quantité importante de documentation ou qui pourront amortir leur coût sur plusieurs applications.

Pour des petits projets, des outils fournis gratuitement par Microsoft peuvent s’avérer suffisant.

Truc Les adresses Web données ci-dessous sont longues et à-peu-près impossibles à taper sans erreur dans la barre d’adresse de votre navigateur. Pour vous faciliter l’accès à ces pages, vous pouvez passer par notre propre site Web à http://www3.sympatico.ca/jbfi/vb.htm. La section « Outils », dans le milieu de la page, vous offre des liens vers ces sites.

Le compilateur d’aide pour les applications et la documentation sont disponibles dans un logiciel appelé le HTML Help Workshop que vous trouverez, ainsi que la documentation à http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp.

Si vous voulez créer des fichiers d’aide pour les programmeurs qui utiliseront vos composantes .NET, plutôt que des fichiers pour des applications, vous devrez utiliser le Visual Studio Help Integration Kit, disponible à différents endroits, selon la version de Visual Studio que vous utilisez :

2005

msdn.microsoft.com/vstudio/extend/default.aspx

2003

www.microsoft.com/downloads/details.aspx? familyid=CE1B26DC-D6AF-42A1-A9A4-88C4EB456D87

2002

www.microsoft.com/downloads/details.aspx?familyid=3eaeb657-98dd-4959-b946-9719fec3a3ce

Tous ces outils demandent que vous disposiez en plus d’un éditeur HTML. Visual Studio peut être utilisé, mais pour des pages complexes, vous préférerez probablement utiliser un éditeur spécialisé.

Dans vos applications, vous créez des liens avec l’aide en ligne par l’intermédiaire d’un contrôle HelpProvider. Ce contrôle possède une propriété HelpNamespace qui permet de le faire pointer au fichier d’aide de votre

Page 24: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 304

application. Une fois le HelpProvider ajouté à un formulaire, chaque contrôle possède quatre nouvelles propriétés13 permettant de déterminer quelle page sera appelée quand l’utilisateur activera F1 quand le contrôle a le focus.

ShowHelp définit si le contrôle affiche de l’aide ou pas. C’est en quelque sorte une propriété Enabled pour la touche F1 sur le contrôle.

HelpKeyword indique au système la page d’aide à afficher. Le créateur du système d’aide a défini un mot clé pour chacune des pages et devrait normalement en fournir une liste au programmeur pour qu’il puisse créer les références.

HelpNavigator détermine l’action à prendre sur l’activation de l’aide. On veut généralement présenter la page d’aide définie par la propriété HelpKeyword, mais il existe aussi d’autres méthodes de navigation dans le système d’aide, ou vous pourriez vouloir pointer à la table des matières (TableOfContents) du système d’aide.

HelpString détermine le texte à afficher sur une demande d’aide « pop-up », la forme d’aide réduite qui apparaît comme une infobulle à l’intérieur de l’application elle-même quand l’utilisateur fait SHIFT-F1 ou active un bouton d’aide (?) dans la barre d’outils d’une boîte de dialogue14. Dans une application Visual Basic .NET, il suffit de mettre du texte dans la propriété HelpString pour qu’il s’affiche sur SHIFT-F1. Pour avoir le bouton d’aide, il faut à la fois activer la propriété HelpButton du formulaire, et désactiver MaximizeBox et MinimizeBox.

Utilisation d’un service Web

Nous avons décrit ce qu’était un service web à la page 33. Nous allons ici apprendre comme nous connecter à un service Web existant.

La conception d’un service Web déborde des cadres de ce cours, mais comme c’est un outil pouvant être très intéressant, nous vous fournissons tout ce dont vous avez besoin pour tester la technique.

13 C’est un mécanisme similaire à celui utilisé par les contrôles ToolTip et ContextMenu dont nous avons parlé durant le cours (pages Error! Bookmark not defined. et Error! Bookmark not defined.). 14 Ce type d’aide n’est pas fourni dans toutes les applications.

Page 25: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 305

Déploiement L’installation du service Web peut être faite sur n’importe quel serveur IIS sur lequel on a installé le framework .NET. Pour les besoins de la démonstration, nous allons utiliser l’Internet Information Service disponible dans toutes les versions de Windows pouvant servir au développement .NET, sauf Windows XP Home qui ne contient pas le IIS.

⇒ Installez le service Web en lançant Exemples supplémentaires\Taxes.msi. Si vous êtes dans les exemples du cours VS2003, le fichier est dans ServiceWeb\Taxes.msi.

Le service est installé par défaut sur le serveur local, dans un dossier Taxes. Le reste de la discussion assume cette localisation.

Test du service

⇒ Ouvrez n’importe quel projet Visual Basic.

⇒ Activez Project►Add Web Reference.

⇒ Vous ne référencez pas le dll contenant le service, mais un fichier descriptif portant l’extension asmx qui décrit le service et indique sa localisation. Si vous avez suivi nos instructions jusqu’ici, de fichier a été installé en même temps que le service Web à http://localhost/Taxes/taxes.asmx. Vous pouvez aussi vous aider en activant Web services on the local machine dans la fenêtre principale de l’assistant.

Dans une situation réelle, la localisation serait l’adresse du serveur sur lequel vous hébergez votre service Web, quelque chose comme http://www.toto.com/ServicesWeb/Taxes.asmx.

Page 26: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 306

⇒ En cliquant sur Go, Visual Studio analyse le service et devrait générer la page suivante, qui permettra de tester le service.

Important IIS doit avoir été lancé sur la station où vous voulez installer le service Web. Si vous avez des problèmes avec notre exemple, consultez la documentation de votre système d’opération pour la méthode à suivre pour installer et lancer IIS. Dans Visual Studio 2005, il est possible que vous receviez une erreur, avec la notice suivante à droite de l’écran : The proxy settings on this computer are not configured correctly for web discovery. Il y a une rubrique qui a le même titre que le message dans l’aide en ligne et qui donne les instructions pour corriger le problème. Avec le framework 1.1, il est par ailleurs important que ASP.NET 1.1 soit fonctionnel. La mise à jour d’ASP ne se fait pas toujours automatiquement lors de l’installation de Visual Studio 2003, et doit être faite manuellement en appelant aspnet_regiis /i à partir d’une fenêtre de commande .NET.

⇒ Activez la méthode que vous voulez tester et entrez un montant15 sur lequel vous voudriez calculer la taxe.

⇒ Activez Invoke pour voir le résultat, soit le message XML qui est retourné à l’application.

<?xml version="1.0" encoding="utf-8" ?>

<decimal xmlns="http://www3.sympatico.ca/jbfi">0.85</decimal>

Dans l’utilisation courante du service Web, vous n’aurez pas à décortiquer ce message, le système d’appel de .NET retournera simplement 0.85 dans votre application.

15 Le format est déterminé par le serveur Web et non pas par votre panneau de configuration. Si vous avez une erreur du genre Cannot convert 12.13 to System.Decimal, essayez avec un autre séparateur décimal.

Page 27: Ce document est un ajout au manuel que nous … · Visual Basic 2005 – Exploration 283 Pour simplifier un cours déjà très chargé, nous avons dû laisser tomber plusieurs concepts

Visual Basic 2005 – Exploration 307

Appel du service

⇒ Activez le bouton Add Reference pour que votre application ait l’information nécessaire pour pouvoir appeler le service Web quand elle en aura besoin.

Le Solution Explorer contient maintenant la référence, qui pointe à localhost dans notre cas, mais qui pointerait à une adresse Internet ou intranet dans une situation réelle.

⇒ Il ne vous reste qu’à instancier un objet référençant le service Web et à appeler ses méthodes :

Dim webTaxes As New localhost.Taxes() Debug.WriteLine(webTaxes.TPS(12.85)) Debug.WriteLine(webTaxes.TVQ(12.85))

Truc La dénomination localhost comme namespace n’est pas très recommandée. Vous remarquerez que vous pouvez renommer la référence Web dans le Solution Explorer, ce qui définit en même temps le namespace.

Dim webTaxes As New MonServiceWeb.Taxes()

Pour simplifier la démonstration, nous avons séparé le calcul de la TPS et de la TVQ.

C’est très peu efficace, parce que le service Web doit être appelé 2 fois. Comme chaque appel nécessite une certaine quantité de travail à la fois chez le client et chez le serveur, sans compter l’échange d’information entre les deux, ce n’est pas du tout performant.

Une meilleure approche serait de créer une classe ou une structure qui permettrait, au travers de ses propriétés, de retourner les deux valeurs dans un seul appel.