Initiation à WPF Par Hervé Labénère Date de publication : 23 février 2009 Au tr

Initiation à WPF Par Hervé Labénère Date de publication : 23 février 2009 Au travers de la réalisation d'un mini lecteur MP3, cet tutoriel aborde différents concepts de la technologie WPF comme le DataBinding, les styles et les thèmes ainsi que le format de tag ID3Tag(1) (1) N'hésitez pas à commenter cet article ! Commentez Initiation à WPF par Hervé Labénère I - SPECIFICATIONS...................................................................................................................................................3 II - PRE-REQUIS......................................................................................................................................................... 4 III - ARCHITECTURE.................................................................................................................................................. 4 IV - REALISATION.......................................................................................................................................................5 IV-A - Conception de la couche Entité (EntiteMorceau.cs)................................................................................... 5 IV-B - Conception de la couche Contrôle (ControleEditeurTags.cs et ControleLecture.cs))..................................6 IV-C - Conception de la couche Dialogue (DialogueIHMLecteur.xaml)...............................................................10 IV-C-1 - Liaison de données (DataBinding) avec une source Xml, en WPF..................................................13 IV-C-2 - Lier une propriété à la valeur d'un contrôle......................................................................................14 IV-C-3 - Mettre un peu de style dans notre application (DialogueIHMLecteur.xaml)......................................16 V - CONCLUSION..................................................................................................................................................... 18 - 2 - 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 ® 2008 Hervé Labénère. 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. http://herve-labenere.developpez.com/tutoriels/dotnet/WPF/ Initiation à WPF par Hervé Labénère I - SPECIFICATIONS L'application se présente de la façon suivante : Un lecteur MP3 rudimentaire reposant sur la brique WPF pour l'aspect visuel et DirectX.AudioVideoPlayBack pour les fonctionnalités audios, plus quelques fonction d'édition de tags MP3. Fonctionnalités requises 1 Lecture d?un morceau MP3 2 Pause 3 Arrêt 4 Parcourir de fichier sur le PC pour sélectionner le fichier à lire 5 Un éditeur de tags pour modifier les tags associés au morceau MP3 en cours de lecture 6 Une image d'album associée au morceau MP3, qui peut être redimensionnée à la volée via un slider Liste des composants dans la partie Lecteur audio - 3 - 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 ® 2008 Hervé Labénère. 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. http://herve-labenere.developpez.com/tutoriels/dotnet/WPF/ Initiation à WPF par Hervé Labénère Nom Composant Type Titre Lecteur DirectX.AudioVideoPlayBack.Audio btnParcourir Button ... lTitre Label Titre de la chanson btnPause Button Pause btnArret Button Arrêt btnLecture Button Lecture imgAlbum Image sliderImg Slider cbxStyle comboBox Style Garçon / Style Fille Liste des composants dans la partie Editeur de tags MP3 Nom Composant Type Titre txtbTitre TextBox txtbAuteur TextBox btnOk Button Enregistrer II - PRE-REQUIS Pour exécuter l'application 1 .Net Framework 3.0 2 Direct X 9.0 (DirectX.AudioVideoPlayBack.dll, mais aussi DirectX.dll) SDK DirectX 9 Pour réaliser l'application 1 Visual C# Express 2008 ici III - ARCHITECTURE Pour construire une application modulaire et évolutive, l'approche MDA conseille de distinguer 3 couches au sein de l'application, qui interagissent entre-elles: 1 la couche graphique (classe Dialogue) 2 la couche métier (classes Contrôle) 3 la couche données (classe Entité) Ca tombe bien, car WPF en décrivant les interfaces grâce à une syntaxe déclarative (le Xaml), isole la couche graphique du reste de l'application. En ce qui concerne la couche métier, on recense deux classes, une concernant les fonctions de lecture et une concernant les fonctions d'édition de tags. - 4 - 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 ® 2008 Hervé Labénère. 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. http://herve-labenere.developpez.com/tutoriels/dotnet/WPF/ Initiation à WPF par Hervé Labénère La réalisation de l'application suivra le sens suivant : Classe d'entité -> Classes de contrôle -> Classe de dialogue. Car la classe de dialogue encapsule (et donc dépend de) les classes de contrôle qui elles-mêmes encapsulent la classe d'entité. En effet, la classe DialogueIHMLecteur appellera les méthodes des classes ControleLecture et ControleEditeur, suivant les actions de l'utilisateur. IV - REALISATION Ouvrir Visual C# Express 2008. Choisir dans le Menu File -> New Project -> WPF Application IV-A - Conception de la couche Entité (EntiteMorceau.cs) Cette couche ne contient que la définition de la structure strTagsMP3 qui est une représentation d'un fichier MP3 avec ses tags titre, artiste, et genre public struct strTagsMP3 { public string tagOK; // 03 car public String titre; // 30 car public String artiste; // 30 car public short genre; // 01 car // total 128 car } La classe EntiteMorceau implémente cette structure et contient simplement les accesseurs pour accéder en lecture / modification à chacun des tags. public class EntiteMorceau { private strTagsMP3 TagsMP3; public strTagsMP3 accTagsMP3 { get { return TagsMP3; - 5 - 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 ® 2008 Hervé Labénère. 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. http://herve-labenere.developpez.com/tutoriels/dotnet/WPF/ Initiation à WPF par Hervé Labénère } set { TagsMP3.tagOK = value.tagOK; TagsMP3.titre = value.titre; TagsMP3.artiste = value.artiste; TagsMP3.genre = value.genre; } } public string accTagOk { get { return TagsMP3.tagOK; } set { TagsMP3.tagOK = value; } } public String accTitre { get { return TagsMP3.titre; } set { TagsMP3.titre = value; } } public String accArtiste { ... } public short accGenre { ... } } } IV-B - Conception de la couche Contrôle (ControleEditeurTags.cs et ControleLecture.cs)) La classe ControleEditeur contient en particulier les 3 méthodes OuvrirFichier, PossedeTag et EcrireTag qui sont des adaptations du code source du hors-série code(r) #4. La méthode PossedeTag ouvre un filestream sur le fichier passé en paramètre, se positionne 128 bits avant la fin du fichier, lit les 3 premiers octets du filestream et détecte si le tableau de bits ainsi stocké contient la chaîne " TAG ". Si la chaîne " TAG " est stocké, c'est que ce fichier MP3 contient effectivement des tags. private bool PossedeTag(string fichier) { // ouvrir le fichier FileStream f = new FileStream(fichier, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); // se positionner sur le tag f.Seek(-128, SeekOrigin.End); //ouverture d'un binaryreader sur le fichier BinaryReader br = new BinaryReader(f); byte[] tagArray = br.ReadBytes(3); // lire les 3 premiers octets string tag = System.Text.Encoding.Default.GetString(tagArray); - 6 - 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 ® 2008 Hervé Labénère. 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. http://herve-labenere.developpez.com/tutoriels/dotnet/WPF/ Initiation à WPF par Hervé Labénère br.Close(); // si ces octets contiennent "TAG", c'est qu'il y a un tag if (tag.CompareTo("TAG")==0) return true; else return false; } La méthode OuvrirFichier prend en paramètre le chemin du fichier à ouvrir (type String), lit les tags du fichier en se positionnant 128 bits avant la fin du fichier puisque c'est à cet endroit d'un fichier MP3 que les tags sont stockés. Elle vide la structure de l'objet de type EntiteMorceau de ses éventuelles valeurs en mémoire. Elle appelle la méthode PossedeTag. Si le fichier ne possède pas de tag MP3, elle rend l'objet Morceau tel quel, cad vide. Sinon, la méthode se positionne 128 bits avant la fin du fichier pour lire les tags (f.seek(-128, SeekOrigin.End)). On lit alors le contenu des tags, en éliminant le caractère " / " qui fonctionne comme un espace vide. Pour le dernier caractère, on utilisera la méthode PeekChar, pour le lire, sans avancer dans le fichier, sinon une exception est levée. Puis on attribue grâce aux accesseurs les tags adéquats titre, artiste, genre. Concernant les genres musicaux, on a simplifié la liste en ne gardant que 6 genres principaux : • genres[8] => "Jazz"; • genres[9] => "Metal"; • genres[13] => "Pop"; • genres[15] => "Rap"; • genres[18] => "Techno"; • genres[32] => "Classical"; Si le fichier contient un genre différent, on uploads/Litterature/ initiation-a-wpf-par-herve-labenere.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager