Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

Cours VB.NET

Image non disponible


précédentsommairesuivant

X-M. Utiliser le 'Presse papier'

On a tous coupé un bout de texte pour le coller à un autre endroit.

Pour cela on a utilisé le presse papier ou 'Clipboard' de Windows.

Comment faire cela par code?

Voyons cela en VB 2003 et VB 2005.

X-M-1. En VB 2003 (Framework 1)

X-M-1-a. Mettre dans le presse papier

Image non disponible
 
Sélectionnez

Clipboard.SetDataObject(Texte)

il y a une surcharge:

 
Sélectionnez

Clipboard.SetDataObject(Texte, True)

Le second paramètre spécifie si les données doivent rester dans le Presse-papiers lorsque l'utilisateur quitte l'application.

X-M-1-b. Récupérer du presse papier

 
Sélectionnez

Dim iData As IDataObject

iData = Clipboard.GetDataObject()
 

Pour la récupération, il faut s'occuper du format des données: si on récupère un BipMap et qu'on le colle dans un textbox, il y a problème!! On récupère donc un objet qui contient les données mais aussi des indications sur le format des données ;on peut tester ce format avant de 'coller'.

On récupère un objet de type IDataObject qui contient.

La méthode GetFormats permettant de connaître tous les formats contenus dans IDataObject

 
Sélectionnez

        Dim myFormatsArray As String() = iData.GetFormats(False)

La méthode GetDataPresents permettant de savoir si un format est présent:

 
Sélectionnez

       If iData.GetDataPresent(DataFormats.Text) Then 

La méthode GetData permettant de récupérer les données (paramètre: le format).

 
Sélectionnez

        textBox2.Text = CType(iData.GetData(DataFormats.Text), String)

Les différents formats:

 
Sélectionnez


DataFormats.Text

DataFormats.Rtf

DataFormats.Html

DataFormats.CommaSeparatedValue

DataFormats.Dif

 

DataFormats.BitMap

DataFormats.Dib

DataFormats.WaveAudio

...

X-M-1-c. Exemple

Mettre le texte sélectionné de TextBox1 dans le presse papier:

Un Button1 portant le texte "Copier" contient le code:

 
Sélectionnez

If textBox1.SelectedText <> "" Then
    Clipboard.SetDataObject(textBox1.SelectedText)
End if

Remarque: si je voulais un button1 "Couper" il aurait fallu ajouter textBox1.SelectedText=""

Récupérer le texte du presse papier et le mettre dans TextBox2.

Un Button2 nommé "Coller" contient le code:

 
Sélectionnez

Dim iData As IDataObject = Clipboard.GetDataObject()

' Détermine si c'est du texte.
If iData.GetDataPresent(DataFormats.Text) Then
' récupére le texte par GetData puis le cast en String
textBox2.Text = CType(iData.GetData(DataFormats.Text), String)
Else
' C'est pas du texte.
textBox2.Text = "Pas possible de récupérer."
End If

X-M-1-d. Alternative

Au lieu d'utiliser l'objet Clipboard, on peut utiliser une méthode plus simple:

Le formulaire étant actif et la textbox ayant le Focus envoyez CTRL C avec SendKeys.Send pour couper, CTRL V pour coller: c'est Windows qui s'occupe de tout!!

X-M-2. My.Computer.Clipboard à partir de VB 2005

My.Computer.Clipboard : permet de récupérer des informations sur le contenu du presse-papier, de récupérer et de définir son contenu avec une certaine simplification.

On peut mettre du texte dans le presse-papier:

 
Sélectionnez

My.Computer.Clipboard.SetText(TextBox3.Text)

On peut même indiquer le format du texte (rtf, html, text, unicode..):

 
Sélectionnez

My.Computer.Clipboard.SetText(TextBox3.Text, TextDataFormat.Rtf)

Il existe aussi SetImage, SetAudio...

On peut vérifier si le Presse-papier contient une image(ContainsImage), du texte( ContainsText), du son (ContainsAudio).. et récupérer cette image (GetImage ) ou ce texte (GetText).

 
Sélectionnez

If My.Computer.Clipboard.ContainsImage Then
    PictureBox1.Image = My.Computer.Clipboard.GetImage
ElseIf My.Computer.Clipboard.ContainsText Then
    TextBox1.Text = My.Computer.Clipboard.GetText
End If
					<paragraph>
						
					</paragraph>

X-M-3. TextBox et couper-coller

A partir de VB 2005(le Framework 2) pour copier coller dans un TextBox , c'est encore plus facile:

La propriété ShortCutsEnabled = True permet à l'utilisateur d'ouvrir un menu contextuel avec le click droit; ce menu permet les annuler, couper, copier, coller, supprimer, Sélectionner tout; ce qui peut aussi être fait avec les raccourcis clavier Shift/Inser Ctrl/Inser..

Image non disponible

X-N. Paramètres de configuration (App.ini, registre, App.config)

En plus des données, une application a besoin d'utiliser des paramètres:

Ceux de l'application:

-Nom des bases de données à ouvrir.

-Chemin des bases de données.

-Chaînes de connexion

-Ceux de chaque utilisateur:

- Etat, position et dimension des formulaires.

- Couleurs.

-Paramètres d'imprimante: dimension du papier, police de caractères.

-Préférences de l'utilisateur.

..

Toutes ces informations doivent bien être stockées quelque part!!!

On peut les stocker dans:

-De simples fichiers.

-Des fichiers .INI

-Le registre.

-Des fichiers de configuration .Config (VB 2003)

-Des fichiers de configuration .Config (VB 2005)

En VB2005 on peut même lier une propriété à un paramètre de configuration.

X-N-1. Les Fichiers

Il y a longtemps on utilisait un fichier séquentiel.

On ouvrait le fichier avec FileOpen(), on écrivait les paramètres avec Writeline.

Lors d'une utilisation ultérieure du logiciel on lisait les paramètres avec LineInput.

On utilisait aussi parfois une table dans une base de données pour stocker les paramètres.

Avec Vb.Net certains stockent les paramètres dans un fichier XML (directement ou à l'aide de la serialization)

Mais VB offre d'autres méthodes dédiées à cet usage.

X-N-2. Fichiers .INI

Il y a quelques temps (jusqu'à Windows 95 et même après), on utilisait les fichiers .INI.

Chaque application avait son fichier INI, Windows avait aussi ses propres fichiers INI: System.Ini Boot.Ini..

Exemple d'un fichier MonApp.INI , il est situé dans le répertoire de l'application ou dans le répertoire Windows.

Si on le regarde avec NotePad:

 
Sélectionnez

[Configuration Matérielle]      
RépertoireDonnées=C:\M\Donnees  
RépertoireSauvegardes=C:\M\Sauve
RépertoireLocal=C:\M\Local      
[Configuration Logiciel]        
SoftAgenda=Calendar.Exe         
TypeAgenda=0                    
PathAgenda= 

Dans notre exemple, le fichier donne les répertoires de données et le nom de l'agenda à utiliser.

Il comporte de grandes rubriques,[Configuration Matérielle] entourées de [].

Dans chaque rubrique, il y a des clés, RépertoireDonnées par exemple, suivis d'un = puis de la valeur correspondant à la clé C:\M\Donnees ici.

Comment lire ou écrire dans un fichier Ini 'Privé' (propre à l'application).

Il faut pour cela utiliser des fonctions fournis par les API Windows (elles se trouvent dans Kernel32.dll).

GetPrivateProfileString permet de lire une string correspondant à une clé.

GetPrivateProfileInt permet de lire un entier correspondant à une clé.

PutPrivateProfileString permet d'ecrire une string correspondant à une clé.

PutPrivateProfileInt permet d'écrire un entier correspondant à une clé.

A- Avant, il faut les déclarer.

 
Sélectionnez

'Fonction lisant un Integer

Declare Function GetPrivateProfileInt Lib "Kernel32" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As String, _ 
ByVal nDefault As Long, ByVal lpFileName As String) As Long

 

'Fonction lisant une string

Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String,  _
ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Short, _
ByVal lpFileName As String) As Integer 

 

'Fonction écrivant une string

Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" _ 
(ByVal lpApplicationName As String, _ 
ByVal lpKeyName As String, ByVal lpString As String, ByVal lplFileName As String) As Long

 

'Il existe aussi une fonction écrivant un Entier 

 

B- Pour utiliser plus simplement ces appels à la dll , écrivons des fonctions qui gèrent les appels.

 
Sélectionnez


Function Get_Private_Profile_Int(ByVal cAppName As String, ByVal cKeyName As String, _
ByVal nKeyDefault As Integer, ByVal cProfName As String) As Long

'

' LIRE UN ENTIER

' Parametres:

' cAppName Correspond à [Rubrique]

' cKeyName Nom de l'entrée, de la clé

' nKeyDefault Valeur par défaut de la chaîne cherchée

' cProfName Nom du Fichier "INI" Privé

' Sortie:

' La fonction retourne une valeur numérique entière

 Get_Private_Profile_Int = GetPrivateProfileInt(cAppName, cKeyName, nKeyDefault, cProfName)

End Function

 

Function Get_Private_Profile_String(ByVal cAppName As String, _ 
ByVal cKeyName As String, ByVal cKeyDefault As String, ByRef cKeyValue As String,  _
ByVal cProfName As String) As Integer

'

' LIRE UNE STRING

' Parametres:

' cAppName Correspond à [Rubrique]

' cKeyName Nom de l'entrée, de la clé

' cKeyDefault Valeur par défaut de la chaîne cherchée

' cKeyValue Valeur lue en face de l'Entrée ou cKeyDefault si l'Entrée est vide

' cProfName Nom du Fichier "INI" Privé

'

' Sortie:

' Valeur lue dans cKeyValue

' La fonction retourne le nombre de caractères dans cKeyValue 

Dim iReaded As Integer

Const sLongueur As Short = 255

If cKeyName = "" Then

cKeyValue = Space$(1025)

iReaded = GetPrivateProfileString(cAppName, "", "", cKeyValue, 1024, cProfName)

Else

cKeyValue = Space$(255)

iReaded = GetPrivateProfileString(cAppName, cKeyName, cKeyDefault, cKeyValue, sLongueur, cProfName)

End If

cKeyValue = Trim$(cKeyValue)

'Enlever le dernier caractère?

'If Len(cKeyValue) <> 0 Then

' cKeyValue = Mid$(cKeyValue, 1, Len(cKeyValue) - 1)

'End If

Get_Private_Profile_String = iReaded

End Function

 

 

Function Put_Private_Profile_String(ByVal cAppName As String, ByVal cKeyName As String,  _
ByVal cKeyValue As String, ByVal cProfName As String) As Boolean

' ECRIRE UNE STRING

' Parametres:

' cAppName Correspond à [Rubrique]

' cKeyName Nom de l'entrée de la clé

' cKeyValue Valeur lue en face de l'Entrée ou cKeyDefault si l'Entrée est vide

' cProfName Nom du Fichier "INI" Privé

' Sortie:

' La fonction retourne True si cela a marché

Dim Status As Long

Status = WritePrivateProfileString(cAppName, cKeyName, cKeyValue, cProfName)

If (Status <> 0) Then

Put_Private_Profile_String = True

Else

Put_Private_Profile_String = False

End If

End Function

End Class

 

C- Exemple de lecture et d'écriture:

 
Sélectionnez

- Lecture du répertoire de données dans MonApp.Ini:

 

Dim cRubrique As String = "Configuration Matérielle"    'Nom de la rubrique

Dim cKey As String = "RépertoireDonnées"                'Nom de la clé

Dim cRepertoire As String = Space(255)                  'Variable récupérant la string  

Dim cIniFile As String = "c:\MonApp\MonApp.ini"         'Nom du fichier Ini 

Dim istat As Integer

 

'Appel de la fonction

istat = Get_Private_Profile_String(cRubrique, cKey, "", cRepertoire, cIniFile)

'Affichage du répertoire de données dans une textbox par exemple

TextBox1.Text = Trim(cRepertoire)

 

' Dans notre exemple cela affiche C:\M\Donnees

- Ecriture :Dans MonApp.Ini, dans la rubrique "Configuration Matérielle", derrière la clé "cRepOld", écrire "No":

 
Sélectionnez

Dim cRubrique As String = "Configuration Matérielle"    'Nom de la rubrique  

Dim cIniFile As String = "c:\MonApp\MonApp.ini"         'Nom du fichier Ini 

Dim bOk As Boolean

 

bOk = Put_Private_Profile_String(cRubrique, "cRepOld", "No", cIniFile)

 

'on note que la clé "cRepOld" qui n'existait pas a été créée.

Il a bien été ajouté dans le fichier .Ini : cRepOld=No

X-N-3. Registre

A partir de Windows95 et WIndows NT

Attention : l'application doit posséder des droits d'accès au registre suffisants.

Ecriture dans le registre:

Exemple: ajouter la clé "Nom" et la valeur "Philippe" au Registre de l'utilisateur en cours.

Cela sous la clé "Noms" dans HKEY_CURRENT_USER du Registre.

 
Sélectionnez

Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Noms")
key.SetValue("Nom", "Philippe")

Pour voir dans le registre le résultat:

Menu 'Démarrer'-> menu 'Exécuter' taper 'Regedit'

Image non disponible

Lecture de valeur.

 
Sélectionnez

Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Noms")
Dim name As String = CType(key.GetValue("Nom"), String)

La méthode GetValue retourne un Object. Si votre code comporte Option Strict On, vous devez effectuer un cast de la valeur de retour vers le type de données que vous avez placé précédemment dans la valeur.

GetValue retourne Nothing si la valeur n'existe pas.

Voir le chapitre sur le registre pour les détails.

X-N-4. Fichier de configuration App.Config File de VB2003 (Framework 1)

VB enregistre les paramètres dans un fichier au format XML.

Créer le fichier de configuration:

Projet->Ajouter un nouvel élément-> cliquer sur 'Fichier de configuration':'App.config' le fichier de configuration en XML est ajouté au projet;(cela ne parrait pas possible en VB 2005 Express)

On le voit dans une fenêtre:

 
Sélectionnez

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

<configuration>                        

</configuration> 

Il faut ajouter la partie 'AppSettings' qui contient la configuration, cela donne:

 
Sélectionnez

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

<configuration>                        

<appSettings>                          

<add key="TaillePage" value="5" />     

</appSettings>                         

</configuration>  

On remarque que l'on a ajouté les balises <appSettings> et </appSettings>.

Entre ces balises, on peut ajouter des lignes contenant une clé et sa valeur:

 
Sélectionnez

<add key="TaillePage" value="5" />

On peut modifier les couples 'clé-valeur' dans l'ide ou bien en ouvrant le fichier App.config avec NotePad.

Pour lire un élément de la configuration:

 
Sélectionnez

Dim TaillePage As String = Configuration.ConfigurationSettings.AppSettings("TaillePage")

(on récupère une string :"5" dans l'exemple)

Pour lire tous les éléments:

 
Sélectionnez

Dim mAppSet As Specialized.NameValueCollection

mAppSet = Configuration.ConfigurationSettings.AppSettings

 

'Affiche dans MaList les clés:

If Not mAppSet Is Nothing Then

Me.maliste.Items.Clear()

Dim keys() As String

keys = mAppSet.AllKeys

Dim key As String

For Each key In keys

Me.maliste.Items.Add(key & ": " & mAppSet.Item(key))

Next

End If

On utilise une collection mAppSet de type 'NameValueCollection', on y met AppSettings.

On peut voir le nom des clés grâce à mAppSet.GetKey et les valeurs grâce à mAppSet.Item()

Le problème est que pour modifier une valeur par code, il faut charger le fichier XML, modifier puis enregistrer le fichier XML. C'est complexe!! Il existe des classes qui font cela automatiquement.

X-N-5. Configuration par paramètres Settings de VB2005 (Framework 2)

Dans le Framework 2 Configuration.ConfigurationSettings n'existe plus!!

il faut utiliser Configuration.ConfigurationManager mais il y a beaucoup plus simple avec la classe My .

Les valeurs des paramètres sont enregistrées automatiquement si dans les propriétés du projet, dans l'infrastructure de l'application, "Enregistrer My.setting lors de l'arrêt" est coché.

Les paramètres de configuration concernent l'application ou l'utilisateur.

Les paramètres d'application sont en lecture seule. Dans la mesure où ces paramètres sont des informations du programme, vous n'avez en principe pas besoin de les modifier. Ce sont par exemple le chemin d'une base de données ou un URL.

En revanche, les paramètres d'utilisateur peuvent être lus et modifiés. Ce sont les positions de formulaires, couleur..

On peut créer les paramètres dans le 'Projet designer':

En vb 2005, pas besoin d'ajouter le fichier comme en vb 2003, le fichier de configuration est crée et ajouté au projet dès que l'on crée un paramètre.

Les paramètres de configuration sont donc directement accessibles dans les propriétés du projet (dans l'explorateur de solution double cliquer sur My Projet ou passer par le menu Projet-> Propriétés de..:

Exemple:

Onglet 'Paramètres' , créons un paramètre nommé 'Para1' et contenant '1' (c'est une string)

Image non disponible

Un paramètre à un nom, un type, une portée (Application ou Utilisateur), une valeur.

Pour créer, se mettre dans la colonne 'Nom' dans la ligne '*' et taper le nom du paramètre, choisir le type en déroulant la liste avec le bouton de la colonne type, choisir la portée puis éventuellement une valeur.

Donc pas besoin de passer par NotePad et de manipuler de l'XML.

Les fichiers de configuration sont automatiquement crées lors du démarrage de l'application (avec les valeurs par défaut indiquées dans l'onglet 'paramètres').

Pour utiliser un paramètre dans le programme:

on fera:

 
Sélectionnez

MonParamètre= My.Parametre.Para1

Les Paramètres sont en Read-Only si la portée est 'Application', et en Read-Write (donc modifiable par code) si la portée est 'Utilisateur'.

Ces 'variables paramètres utilisateur' ont des valeurs qui seront conservées et enregistrées automatiquement dans l' 'environnement' d'un utilisateur (en WindowsForms). Si on en modifie la valeur, on retrouve la valeur modifiée lors d'une utilisation ultérieure ce qui permet de conserver les habitudes des utilisateurs.

Modifions un paramètre utilisateur:

 
Sélectionnez

My.Parametre.Para1= "666" 

La nouvelle valeur sera automatiquement enregistrée dans le fichier de config.

Bien sur le paramètre 'NomConnexuinS' qui est un paramètre application n'est pas modifiable.

En VB2005 vous pouvez créer des paramètres de type Color, Font, Point, Size:

 
Sélectionnez

My.Settings.MyFont= New Font (Me.Font, FontStyle.Italics)

Profil utilisateur:

On peut créer des 'Profils' avec plusieurs noms de profil qui auront chacun des paramètres ayant leur propre valeur pour chaque utilisateur Windows.

On peut par exemple créer un profil "Philippe" et, dans ce profil, donner à Para1 la valeur '333'. Créer un second profil "Odile" et, dans ce profil, donner à Para1 la valeur '222'. Dans ce cas si l'utilisateur Philippe ouvre une session Windows sous le nom l'utilisateur 'Philippe' et qu'il lance l'application, c'est la valeur '333' qui se trouvera dans My.Parametre.Para1

Evènement survenant lors du changement de valeur des paramètres.

En haut à droite, il y a un bouton ou un menu déroulant qui donne accès à 'Afficher le code'.

Cela donne accès à une Classe partielle Setting qui donne accès aux routines PropertySettings, ChangingSettings, SavingSettings; ainsi quand un paramètre change par exemple, on peut mettre ici le code nécessaire à la mise à jour.

Dans quels fichiers et ou est enregistré le 'setting'? :

Dans des fichiers XML.

En mode design:

Les paramètres d'application et utilisateurs (ceux de départ qui ont été écrits à la main dans les propriétés) sont stockés dans la section MonApplication.My.Settings de:

app.Config qui est dans le source, dans "c:\Documents and setting\NomUtilisateur\Mes Document\Visual Studio 2005\MonApplication\MonApplication"

MonApplication.exe.config dans les répertoires bin et release quand on génère l'application. (c'est ce fichier qui sera déployé)

En cours d'exécution:

Les paramètres d'application sont dans:

MonApplication.exe.config dans le répertoire de l'exécutable. (c'est ce fichier qui sera déployé), on rappelle que ces paramètres ne sont pas modifiables.

Les paramètres utilisateurs sont dans

user.config dans le répertoire C:\Documents and Settings\NomUtilisateur\Local Settings\Application Data\NomSociete\MonApplication.exe_Url_43f52d0fihtu0kzyyxxngiyacs5ljtnb\1.0.0.0 . On remarque que VB crée un répertoire dans C:\Documents and Settings\NomUtilisateur\Local Settings\Application Data . Vb utilise ensuite le nom de la société qui distribue le logiciel (le nom qui est dans l'assembly) puis le nom de l'application et enfin la version du programme. Comme le framework s'occupe de tout, à priori, on n'a pas à s'occuper des chemin.

Contenu du fichier WindowsApplication1.exe.config :

Situé dans "c:\Documents and setting\NomUtilisateur\Mes Document\Visual Studio 2005\WindowsApplication1\WindowsApplication1" (et dans bin\release après génération)

L'application se nomme "WindowsApplication1" , on regarde ou est enregistré 'Para1':

 
Sélectionnez

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

<configuration>

<configSections>

<userSettings>

<WindowsApplication1.My.MySettings>

<setting name="parmetre1" serializeAs="String">

<value>12</value>

</setting>

</Bonjour.My.MySettings>

</userSettings>

</configuration>

On peut le voir plus rapidement en cliquant dans l'explorateur de solution sur App.Config

X-N-6. Liaison propriétés-Settings de VB2005 (PropertyBinding)

Depuis VB2005, on peut 'lier' la propriété d'un contrôle avec un paramètre. C'est à dire enregistrer automatiquement les valeurs d'une propriété dans les paramètres de configuration.

Prenons un exemple:

J'ai crée une Form1, je veux que l'utilisateur, lorsqu'il lance l'application, retrouve Form1 à la position où il l'avait laissée.

Il faut donc enregistrer la valeur de la propriété Location de Form1 dans le Setting, la configuration, pour cela on va faire du PropertyBinding: On va lier cette propriété à un paramètre du setting.

Dans la fenêtre de propriété de Form1, aller en haut de la liste, cliquer sur le '+'de (ApplicationSettings), puis au niveau de la ligne (PropertyBinding), cliquer sur le bouton à droite. Cela ouvre la fenêtre 'Paramètres d'application de Form1'

Image non disponible

Cliquer sur la ligne "location", puis sur le bouton à droite.

Image non disponible

Dans la liste qui s'ouvre, cliquer sur 'Nouveau": La fenêtre 'Nouveau paramètre d'application' s'ouvre:

Image non disponible

Taper un nom pour le nouveau paramètre (mylocation par exemple), une valeur par défaut si necessaire.

Puis Ok, Ok

C'est fait: le paramètre 'mylocation' est lié à la propriété Location de Form1.

Regardons dans les paramètres de l'application (menu Projet=>Propriétés de..)

Image non disponible

On voit bien le nouveau paramètre mylocation de type System.Drawing.Point. Il est lié à Form1.Location (Dans la fenêtre de propriété de form1, sur la ligne location, il y a une toute petite icône qui le signale).

La valeur de Form1.Location sera enregistrée automatiquement et restituée lorsque l'on lancera ultérieurement le programme.

En fait VB génère du code prenant en charge ce BindingProperty: dans l'explorateur de solution cliquer sur MyProjet->Setting.Setting->Setting.Designer.vb on voit le code généré.

X-O. Utiliser les 'Ressources'

Ressources: Document informatique de toute nature (texte, image, son, programme).

Une ressource est une donnée non exécutable qui est déployée logiquement avec une application.

Les ressources sont un ensemble d'éléments,: images, icônes, textes(chaînes), sons, fichiers ou autres qui sont utilisées par le programme. Elles servent habituellement à enrichir l'interface utilisateur. Ce ne sont pas des données. Elles sont contenues dans un fichier .resx et dans un répertoire de ressource.

X-O-1. Intérêt des ressources ?

Si j'ai une image à utiliser dans un contrôle, pourquoi ne pas la mettre directement dans la propriété de mon contrôle?

Vous créez cette image, si une semaine plus tard vous trouvez une image hyper meilleur, avec les ressources, vous n'avez plus qu'à la placer dans le répertoire Ressources à la place de votre précédente image. Vous recompilez et c'est fait.

Si vous avez une même image qui est utilisée à plusieurs endroits de votre application, avec les ressources, vous n'aurez qu'une seule ressource (donc diminution en taille de l'exe) et une facilité de maintenance: plus besoin d'effectuer la modification partout où l'image est utiliser.

Enfin si vous voulez écrire une version de votre exécutable en français et en Anglais, avec les ressources, il n'est pas nécessaire d' écrire 2 programmes, il suffit de faire 2 fichiers de ressources.

X-O-2. Les types de ressources ?

Les types de ressources sont Chaînes, Images, Icônes, Audio, Fichiers et Autre. Chaînes est l'affichage par défaut.

Chaînes
Affiche des chaînes dans une grille de paramètres avec les colonnes Nom, Valeur et Commentaire . Vous pouvez accéder aux paramètres au moment de l'exécution via My.Resources en tant que String. Pour une description des colonnes dans cette grille, consultez la rubrique "Grille des paramètres" ci-après.

Images
Affiche tous les fichiers image, y compris les formats .bmp, .jpg .png et .gif. Ces fichiers sont exposés au moment de l'exécution en tant que Bitmap.

Icônes
Affiche les fichiers icône (* .ico) qui sont exposés en tant que Icon.

Audio
Affiche les fichiers audio, y compris les fichiers .wav, .wma et .mp3. Ces fichiers sont exposés en tant que tableaux d'octets. Le double-clic sur un élément audio permet de l'ouvrir et de le jouer dans Lecteur Windows Media.

Fichiers
Affiche tous les fichiers qui n'entrent pas dans les catégories précitées. Les éléments dans cet affichage peuvent être des fichiers texte exposés en tant que String ou des fichiers binaires exposés en tant que tableaux d'octets.

Autres
Affiche une grille de paramètres pour ajouter d'autres types qui prennent en charge la sérialisation de chaînes (par exemple, Font, Enum, Color et Point). La grille contient les colonnes suivantes : Nom, Type, Valeur et Commentaire.

X-O-3. Voir les ressources

Pour voir les ressources, il faut aller dans les propriétés du projet: double cliquez sur MyProjet dans l'explorateur de solution ou menu 'Projet'=>'Propriétés de..', Onglet 'Ressources')

On voit immédiatement les Chaînes; il est possible de voir les autres types de ressources en déroulant la liste à gauche.

Image non disponible

Ici on voit une ressource 'chaîne' qui se nomme 'toto' (c'est nul!!) et qui contient "2".

X-O-4. Ajouter des ressources

1-Mettre du texte dans une ressource:

Si nécessaire dérouler la liste à gauche et cliquez sur 'Chaînes'.

2 manières d'ajouter une chaîne:

Cliquez sur le bouton 'Ajouter une ressource' puis sur 'Ajouter une nouvelle chaîne'. le curseur se retrouve dans la zone de saisie du nouveau nom: tapez le nom puis la valeur.

Ou cliquez directement dans la zone du nom sur la ligne '*', tapez le nom puis la valeur.

Image non disponible

L'enregistrement est automatique.

2-Mettre le dessin dans les ressources:

Aller dans les ressources

Dérouler la liste à gauche pour y mettre 'Images' puis cliquer sur 'ajouter une ressource'; on vous demande le nom de la ressource (tapez par exemple 'button_blue'), vous vous trouvez dans Paint, dessinez (ou collez) l'image de votre bouton. Puis menu 'Fichier'=>'Enregistrer': le dessin apparaît dans les ressources. Fermez Paint.

X-O-5. Où se trouvent les ressources

Dans l'explorateur de solutions, on voit bien le répertoire de ressources et la ressource qui vient d'être créee (le fichier Image1.bmp par exemple)

Image non disponible

On peut d'ailleurs aller dans ce répertoire et modifier la ressource, remplacer le fichier par un autre, la modification est immédiatement mise à jour dans VB.

Vous créez une image, si une semaine plus tard vous trouvez une image hyper plus belle, vous n'avez plus qu'à la placer dans le répertoire Ressources à la place de votre précédente image.

X-O-6. Modifier une ressource

Une image par exemple :

Cliquez sur la ressource, puis cliquez avec le bouton droit; dans le menu:

Ouvrir: ouvre l'éditeur par défaut (Paint pour une image)

Ouvrir avec : permet de modifier la ressource avec un autre programme.

X-O-7. Utiliser une ressource dans le programme

Les ressources sont accessibles par leur nom dans la Classe My.Ressources.

Mettre le texte d'une ressource dans la barre de titre d'un formulaire:

 
Sélectionnez

Me.Text = My.Resources.Form1Title

Mettre une ressource image dans le plan BackGround d'un formulaire:

 
Sélectionnez

Me.BackgroundImage = My.Resources.Form1Background

Mettre une ressource image dans le plan BackGround d'un bouton:

 
Sélectionnez

MyButton.BackGroundImage= MonProgramme.My.Ressources.Ressources.button_Blue

Mettre une ressource icône comme icône d'un formulaire:

 
Sélectionnez

Me.Icon = My.Resources.MyIcon

Jouer un son qui est dans les ressources.

 
Sélectionnez

My.Computer.Audio.Play(My.Resources.Form1Greeting, AudioPlayMode.Background)

X-O-8. Ressources localisées

On a parfois besoin d'avoir des ressources pour différentes langues. (Texte des boutons en Français ou en Anglais par exemple).

Pour chaque culture faire un fichier .resx

En fait, copier le fichier de ressources et attribuer au fichier de ressources le nouveau nom Resources.CultureSignature.resx

Il semble que les fichiers de ressources de la langue par défaut soit dans le répertoire ressources avec l'extension .resx et que pour chaque autre culture, un sous-répertoire soit nécessaire (sous-répertoire nommé 'fr', 'en-us'..) Enfin dans ce sous répertoire, le fichier se nomme monprogramme.Fr-fr.resx A vérifier!!

Quand la culture de l'ordinateur change, le fichier de ressources correspondant est utilisé.

Exemple: ici on modifie la culture puis on utilise la ressource correspondante.

 
Sélectionnez

    Dim Currentculture As String = My.Application.UICulture.Name
    My.Application.ChangeUICulture("fr-FR")
    MsgBox(My.Resources.MyMessage)
    My.Application.ChangeUICulture(Currentculture)

X-O-9. Ressources liées ou incorporées

Les projets Visual Studio fournissent deux options différentes pour gérer les ressources : celles-ci peuvent être liées (par défaut) ou incorporées. S'il est possible d'avoir à la fois des ressources liées et incorporées dans un même projet, il est plus pratique dans la plupart des cas de choisir une option pour toutes les ressources du projet.

Les ressources liées sont stockées comme des fichiers dans le projet. Pendant la compilation, les données de ressources sont extraites des fichiers et placées dans le manifeste de l'application. Le fichier de ressources (.resx) de l'application stocke uniquement un chemin d'accès relatif ou un lien au fichier sur le disque.

Avec les ressources incorporées, les données de ressources sont stockées directement dans le fichier .resx dans une représentation textuelle des données binaires.

Dans l'un et l'autre cas, les données de ressources sont compilées dans le fichier exécutable.

Les ressources peuvent passer de la valeur "liées " à "incorporées " en modifiant la propriété Persistence du fichier de ressources.

Dans la fenêtre Propriétés, sélectionnez la propriété Persistance et affectez-lui la valeur Incorporé dans .resx.

Dans la fenêtre Propriétés, sélectionnez la propriété Persistance et affectez-lui la valeur Lié au moment de la compilation.

Les ressources incorporées sont le meilleur choix si vous devez partager des fichiers de ressources d'application (.resx) entre plusieurs projets. Par exemple, si vous disposez d'un fichier de ressources communes contenant des informations telles que les logos et les informations relatives aux marques de votre société, l'utilisation de ressources incorporées signifie que vous pouvez vous contenter de copier le fichier .resx et non les fichiers de données de ressources associés.

Vous ne pouvez pas modifier directement les ressources incorporées. Si vous tentez de modifier une ressource incorporée, un message vous invitant à convertir l'élément en ressource liée afin de la modifier s'affichera ; la conversion est recommandée mais facultative. Vous devez les exporter, effectuer vos modifications dans un programme externe, puis les réimporter dans votre projet.

Les ressources de type chaîne sont toujours incorporées et ne peuvent pas être modifiées. Les ressources de fichier sont toujours liées et ne peuvent pas être modifiées.

X-O-10. Comment cela marche ?

Quand on ajoute par exemple une image aux ressources, VB crée (si ce n'est déjà fait), un répertoire Ressources dans votre projet. Puis il copie votre fichier image dans ce répertoire. Ensuite, il crée (ou modifie) un fichier .resX avec une référence vers le fichier image correspondant et une classe interne Ressources. Cette dernière possède des propriétés en lecture seules statiques qui retourne les ressources de votre fichier ressource :

A la compilation, ces images seront incluses dans votre exécutable.

Vous créez cette image, si une semaine plus tard vous trouvez une image hyper meilleur, vous n'avez plus qu'à la placer dans le répertoire Ressources à la place de votre précédente image. Vous recompilez et c'est fait.

X-P. Où mettre les programmes et les données

X-P-1. Il faut séparer les données des programmes !!!

Les programmes, les données n'ont pas la même vocation.

Les fichiers programmes ( les fichiers .exe)sont copiés sur votre disque au moment de l'installation du logiciel ou au moment de sa mise à jour. En dehors de ces périodes, ces fichiers ne changent pas.

Il n'est donc pas utile de sauvegarder fréquemment, car en plus, vous possédez ceux-ci par ailleurs sur un support d'installation (CD-ROM, fichier téléchargé).

Par contre les fichiers de données sont régulièrement créés, enregistrés ou modifiés: mails, documents Word ou Excel, photos, fichiers musicaux, bases de données. Pour ne pas perdre toutes ces informations, il faut les sauvegarder: les enregistrer régulièrement sur un autre support (CD-ROM, disque dur externe, clé USB, autre ordinateur d'un réseau..)

Pour favoriser vos sauvegardes, il est donc logique de séparer vos données de vos programmes, et de les mettre dans des répertoires différents.

Habituellement on a un répertoire de programmes et un répertoire de données, il est possible d'avoir un répertoire de données pour chaque utilisateur si les données sont distinctes et parfois un répertoire commun à tous les utilisateurs (AllUsers)

Ainsi on peut simplement sauvegarder régulièrement la totalité du répertoire de données et uniquement ce répertoire.

De même pour éviter les soucis lors de la réinstallation de Windows, il est plus facile de protéger les données si celles-ci se trouvent sur un disque ou une partition séparée.

X-P-2. Sécurité

Un virus, un ver ou un spyware est un programme qui va essayer d'utiliser votre accès à Windows (vos droits d'utilisateur) pour s' "auto-installer" et prendre la main de votre système.

Or par défaut sous Windows XP vous avez tous les droits (car vous avez un compte administrateur) : mettre à jour le système, installer des programmes, ce qui n'est pas vraiment indispensable pour lire vos mails, faire du traitement de texte ou surfer sur Internet.

Vous pouvez donc utiliser votre Windows de la manière suivante :
  • créer des comptes utilisateurs limités pour l'usage quotidien.
  • utiliser un compte administrateur pour toutes les installations et mises à jour.

C'est une contrainte mais cela garantit le maximum de sécurité.

X-P-3. Quels répertoires utiliser ?

  • Windows 98:
Image non disponible

Un répertoire 'Programs Files' contient des sous répertoires pour chaque programme contenant les exécutables.

Un répertoire 'Mes documents' contenant des sous répertoires pour chaque programme contenant les fichiers de données.

Les paramètres de l'application sont dans un fichier .ini qui se trouve dans le répertoire Windows ou le répertoire de l'application ou la base de registre.

  • Windows XP:
Image non disponible

Un répertoire 'Programs Files' contient des sous répertoires pour chaque programme contenant les exécutables.

Un répertoire 'Documents ans Settings' contient des sous répertoires pour chaque utilisateur (ici le mien se nomme 'Phil') et un répertoire commun à tous les utilisateurs: AllUsers.

Dans chaque répertoire utilisateur il y a:

- un répertoire 'Application Data' pour chaque programme contenant les fichiers de données.

C:\Documents and Settings\phil\Application Data\OpenOffice.org2\user\database

- un répertoire 'Mes documents'

C:\Documents and Settings\phil\Mes documents\Visual Studio 2005\Projects\chiffreromain

Mais aussi un répertoire 'Local Settings' pour les fichiers de configuration et les exécutables.

C:\Documents and Settings\phil\Local Settings\Application Data\Pentax\Digital Camera Utility

  • Windows Vista:
Image non disponible

Version anglaise:

Dans le Desktop,(information trouvée sur le Net)

Il y a:

Un répertoire 'Programs Files'

Un répertoire 'Users' qui contient des répertoires au nom de chaque utilisateur ('pch' ici par exemple)

Dans chaque répertoire utilisateur il y a un répertoire AppData pour les données (qui remplace Application Data). Dessous , il y a un répertoire Local et encore dessous un répertoire au nom de la société qui a fait le logiciel (ici Microsoft) puis un répertoire pour le programme et pour la version.

Ainsi les données du programme LDF version 1.1.0 crées par PolySoft seront dans le répertoire:

C:\Users\MyName\AppData\Local\PolySoft\LDF\1.1.0\

Version française il y a:

Un répertoire 'Ordinateur'(au lieu de computer).

Un sous répertoire 'Disque local(C:)

Un sous répertoire 'Programmes'(au lieu de'Program Files')

Un sous répertoire MonProgramme ou se trouvent le programme exe.

Ainsi l'exécutable du programme LDF est dans le répertoire:

C:\Programmes\LDF

Il 'faudrait' utiliser ces répertoires pour les exécutables et les données!!!

Quand, par exemple, on installe un logiciel avec Click Once de VB2005 sur un ordinateur Windows XP, l'exécutable s'installe dans C:\Documents and Settings\Nom Utilisateur\Local Settings\Apps:

C:\Documents and Settings\phil\Local Settings\Apps\2.0\WD2P2BPB.7A5\OVEEZQLA.BC1\chif..tion_6625898959f0f00b_0001.0000_56fb0b87e9540260

Le fichier de configuration user.config et les données dans C:\Documents and Settings\Nom Utilisateur\Application Data

C:\Documents and Settings\phil\Application Data\Polytel\WindowsApplication1.vshos_Url_dhzke3q02e3bxuhunbsnp0jhjwtnzb1i\1.0.0.0

(On remarque que après '..Application Data' le chemin comporte \CompanyName\ProductName\ProductVersion)

Il ne 'faudrait' pas utiliser le répertoire 'Program Files\Mon Application' pour les données!!

En fait, beaucoup de programmes écrivent des données directement dans le répertoire courant de l'application (dans C;\Program Files\MonApplication); comment cela se passe?

  • Aucun problème avec Windows 98.
  • Avec Windows XP puisque les comptes limités (comptes utilisateurs standards) n'ont pas accès en écriture au dossier %Program Files% et n'ont pas accès à HKEY-Local_Machine du registre; le problème à été résolu simplement: De manière générale les utilisateurs ont un compte administrateur, donc, ils ont tous les droits et peuvent écrire leurs données dans Program Files et modifier le registre!!
  • Vista "contourne ce problème": si on installe un programme qui veut utiliser le répertoire 'Program Files', Vista utilise un répertoire VirtualStore dans lequel il place un faux répertoire 'Program Files', en effet tous les programmes qui tentent d'écrire vers %Program Files% ou %windir% seront automatiquement redirigés vers 'C:\Users\Nom Utilisateur\AppData\Local\VirtualStore\Program Files'. Si le programme tente ensuite de lire le fichier précédemment écrit, le programme lira automatiquement le bon fichier. Tout ceci est invisible pour le programme, c'est Vista qui gère tout( le répertoire AppData\Local\VirtualStore serait caché). On appelle cela la 'virtualisation'. Attention donc, si le programme veut écrire dans C:\Program Files\MonProg\utilisateur , en fait, il écrira dans C:\Users\nom d'utilisateur\AppData\Local\VirtualStore\Program Files\MonProg\utilisateur. .

X-P-4. Obtenir le répertoire de l'exécutable et des données

Rien de plus simple (dans un programme VB 2005 sous Windows XP), pour un utilisateur:

Application.StartupPath donne le répertoire de l'exécutable.

Exemple: dans l'environnement de développement VB 2005, pour le programme WindowsApplication2:

C:\Documents and Settings\phil\Mes documents\Visual Studio 2005\Projects\WindowsApplication2\WindowsApplication2\bin\Debug

Application.UserAppDataPath donne le répertoire de données.

C:\Documents and Settings\phil\Application Data\WindowsApplication1\WindowsApplication1\1.0.0.0

De même on peut obtenir la clé de Registre des données d'application.

Application.UserAppDatRegistry

Pour les données et le registre commun à tous les utilisateurs:

 
Sélectionnez

Application.CommonAppDataPath 

Application.CommonAppDatRegistry

La classe Environment donne des informations concernant l'environnement et la plate-forme en cours ainsi que des moyens pour les manipuler. Par exemple: les arguments de la ligne de commande, le code de sortie, les paramètres des variables d'environnement, le contenu de la pile des appels, le temps écoulé depuis le dernier démarrage du système ou le numéro de version du Common Language Runtime mais aussi certains répertoires .

 
Sélectionnez

Environment.CurrentDirectory  'donne le répertoire courant : ou le processus en cours démarre.

Environment.MachineName       'Obtient le nom NetBIOS de l'ordinateur local.

Environment.OsVersion 'Obtient un Identificateur et le numéro de version de la plate-forme en cours.

Environment.SystemDirectory   'Obtient le chemin qualifié complet du répertoire du système

Environment.UserName          'Obtient le nom d'utilisateur de la personne qui a lancé le thread en cours.

La fonction GetFolderPath avec un argument faisant partie de l'énumération SpecialFolder retourne le répertoire d'un tas de choses:

Exemple: Quel est le répertoire Système?

 
Sélectionnez

Environment.GetFolderPath(Environment.SpecialFolder.System)

En vb 2010 on trouve les répertoires:
Cookies
CDBurning
Desktop
Favories
History
Programs
MyMusic
MyPicture
Recent
SendTo
System
Templates
Personal (Mydocuments)
ProgramFiles
UserProfile
CommonDocuments, CommonMusic, CommonPictures, CommonVideos
MyVideos
Ressources
Windows.

X-P-5. Droits d'accès utilisateur dans Vista et Windows 7 : l'UAC

Pour réduire les effets des logiciels malveillants, Windows Vista inclut un nouveau modèle de sécurité dénommé User Account Control (UAC) qui marque un tournant comparé au modèle traditionnel des privilèges accordés aux utilisateurs de Windows, et affecte presque tous les utilisateurs Windows. L'UAC vise à améliorer l'expérience des utilisateurs standards de Windows, tout en réduisant le risque constitué par les logiciels malveillants.

Dans l'UAC, tous les utilisateurs Windows Vista, dont ceux qui possèdent des droits d'administrateur, interagissent avec leurs PC en tant qu'utilisateurs standards la plupart du temps. Le compte utilisateur standard Windows continue de ne pas avoir de privilèges d'administrateur, ce qui évite à un logiciel malveillant téléchargé malencontreusement par un tel compte de s'installer sur l'ordinateur. Ainsi, le logiciel malveillant qui s'infiltre d'une façon ou d'une autre dans un PC ne peut accéder ni à la base des registres ni aux répertoires protégés.

Si vous essayez d'effectuer une tâche qui nécessite des privilèges d'administrateur, comme l'installation d'un logiciel ou le changement d'état du pare-feu Windows, Windows Vista vous invite explicitement à donner votre autorisation et à vous identifier avant de vous faire passer temporairement au rang d'administrateur pour achever la tâche en cours. Pour un utilisateur standard, cela signifie concrètement la saisie d'un nom d'utilisateur et d'un mot de passe qui appartiennent à un membre du groupe Administrateurs

Dans Windows Vista avec le modèle UAC, les comptes utilisateurs standards ont été modifiés pour offrir des privilèges supplémentaires:

  • visualiser les horloges systèmes et les calendriers
  • modifier les fuseaux horaires
  • changer les paramètres de gestion de la puissance
  • ajouter des imprimantes si les bons drivers sont installés sur l'ordinateur
  • créer et configurer des connexions VPN
  • installer les mises à jour Windows essentielles

Dans les versions précédentes de Windows, un non-administrateur ne pouvait pas facilement comprendre quelles actions lui étaient autorisées. Dorénavant, Windows Vista utilise une icône de protection pour vous aider à comprendre quelles tâches seuls les administrateurs ont le droit d'effectuer


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.