Access & Windows Media Player - 22 Mars 2005 revu le 05 Jul 2013
But : Ouvrir Access au multimédia de qualité, clips vidéo (mpg, avi, asf, DivX) , mp3, fichiers midi etc...L'exemple suivant fournit une interface contenant windows média player et lui seul... "Quel intérêt ?" direz-vous, "je peux utiliser WMP directement sans passer par Access". Bien entendu, mais imaginez les possibilités de sonoriser votre base de données avec des commentaires vocaux différents pour chaque enregistrement... un petit film de votre produit, n'est-ce pas plus descriptif qu'une image immobile ? travailler en musique ? etc... J'avais déjà trouvé des consoles jouant les fichiers etc... mais franchement la qualité du son était exécrable....avec WMP, on obtient une qualité sonore idéale correspondant réellement à la qualité du fichier. Trêve de bavardages voyons le code
On commence par construire un formulaire indépendant de manière banale. Ensuite, il faut aller chercher un outil complémentaire dans la liste disponible, suivant l'image ci-dessous
Sous Access 2003
Sous Access 2010
Quand l'objet windows média player est posé sur le formulaire,on définit un fichier par défaut dans la propriété URL (une grande partie du secret est ici, cette propriété remplie provoque la lecture automatique du fichier lors de l'activation du formulaire). Remarquez le nom de l'objet Windows Média Player. On edite ensuite la propriété du formulaire "sur Activation" pour y régler la hauteur et la largeur du contrôle WMP car il a parfois tendance à se redimensionner sans demander la permission à son auteur. On charge aussi le chemin du fichier par défaut dans une textbox qui nous permet par la suite de changer de fichier. Si cette textbox est vide et que vous appuyez sur le bouton annuler dans la boîte de dialogue de sélection du prochain fichier, en clair si vous ne sélectionnez rien, une erreur se déclenche pour incompatibilité de type, ici si vous appuyez sur le bouton annuler, le fichier en cours redémarre simplement.
Private Sub Form_Current()
DoCmd.Maximize
WindowsMediaPlayer0.Height = 9000
WindowsMediaPlayer0.Width = 14400
'pour eviter une erreur si on clique sur le bouton annuler de la filedialogbox la première fois
Me.Choix = Me![WindowsMediaPlayer0].URL
End Sub
Déjà à ce stade, on peut profiter de notre formulaire, il est fonctionnel et pourrait ressembler à ceci
C'est bien mais insuffisant, nous allons donc tenter de récupérer des noms de fichiers pour changer le fichier lu par WMP
1ère Méthode En réalisant un double clic dans une textbox indépendante que nous nommons [Choix]. Au double clic, le code suivant est exécuté
Private Sub Choix_DblClick(Cancel As Integer)
Me![Choix] = ShowOpen
Me.Refresh
Me![WindowsMediaPlayer0].URL = [Choix]
End Sub
Ce code fait appel à un fonction que j'ai nommée "ShowOpen" qui va ouvrir une boîte de dialogue vers les disques durs et permet de choisir un fichier. Celui-ci doit bien entendu avoir une extension compatible avec Windows Média Player
Pour Access 2003, le code suivant était fonctionnel
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Function ShowOpen() As String
Dim OFName As OPENFILENAME, OldName As String
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = Form_F_Cinema.Hwnd
OFName.hInstance = Application.hWndAccessApp
OFName.lpstrFilter = "Tous les fichiers (*.*)" + Chr$(0) + "*.*" + Chr$(0)
OFName.lpstrFile = Space$(254)
OFName.nMaxFile = 255
OFName.lpstrFileTitle = Space$(254)
OFName.nMaxFileTitle = 255
OFName.lpstrInitialDir = "D:\"
OFName.lpstrTitle = "Ouvrir..."
OFName.flags = 0
If Form_F_Cinema.Choix <> "" Then
OldName = Form_F_Cinema.Choix
End If
If GetOpenFileName(OFName) Then
ShowOpen = Trim$(OFName.lpstrFile)
Else
ShowOpen = OldName
End If
End Function
Sous Access 2010, nous remplaçons tout cela par
Sub ShowOpen()
Dim fd As Office.FileDialog
' Créer un objet FileDialog
Set fd = Application.FileDialog(msoFileDialogOpen)
' Titre de la boîte de dialogue
fd.title = "Sélectionnez un fichier..."
' Ne pas autoriser la sélection multiple
' (donc 1 seul fichier est sélectionnable à la fois)
fd.AllowMultiSelect = False
' Définir les types de fichiers autorisés
fd.Filters.Clear
'
fd.Filters.Add "Video", "*.mp4; *.mpg; *.avi; *.wmv"
fd.Filters.Add "Audio", "*.mp3; *.wma"
fd.Filters.Add "Tous les fichiers", "*.*"
' Afficher la boîte de dialogue
If fd.show() Then
Form_F_Cinema.Choix = fd.SelectedItems(1)
End If
Set fd = Nothing
End Sub
Une fois le chemin et le nom de fichier dans la textbox, la lecture démarre automatiquement
2ème Méthode : Utilisation d'une liste déroulante qui va chercher ses informations dans une table. Cette table aura été remplie avec les noms des fichiers d'un dossier que l'on désignera...
Créons d'abord la table T_Fichiers avec un champ nommé [Url] ...Remarquez le type du champ et sa taille poussée au maximum ( 255 caractères ) pour éviter des problèmes avec la longueur du nom de vos dossiers et fichiers...
Sur le formulaire on pose une zone de liste déroulante qui pointe tout à fait classiquement vers le champ [Url] de la T_Fichiers.
On pose un bouton de commande qui va appeler la routine qui remplira la table avec le code suivant
Private Sub Commande6_Click()
Call AjoutDansTable
End Sub
Sub AjoutDansTable()
'Déclarations obligatoires et préalables
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim Fichier, Chemin As String
'on vide la table préalablement
Call EffacerTable
'Variables qui placent le recordset en mémoire vive
Set db = Application.CurrentDb
Set rs1 = db.OpenRecordset("Select * from T_Fichiers")
Chemin = InputBox(Prompt:="Quel répertoire voulez-vous ajouter ?")
Chemin = Chemin + "\"
Fichier = Dir(Chemin)
Do While ((Len(Fichier) - Len(Chemin)) <> 0)
'il faut ne charger que les fichiers qui sont compatibles, à vous de les personnaliser
If Right(Fichier, 3) = "mp4" Or Right(Fichier, 3) = "wmv" Or Right(Fichier, 3) = "mpg" Then
rs1.AddNew
rs1("URL") = Fichier
rs1.Update
End If
Fichier = Chemin + Dir()
Loop
End Sub
Sub EffacerTable()
Dim Demande As String
Demande = MsgBox("Voulez-vous supprimer la sélection actuelle ?", vbYesNo, "Demande...")
If Demande = vbYes Then
'Empêche les demande de confirmation de s'afficher
DoCmd.SetWarnings False
'Efface le contenu de la table
DoCmd.RunSQL "DELETE * FROM T_Fichiers;"
'Retablit les confirmations
DoCmd.SetWarnings True
End If
End Sub
Quand la zone de liste est remplie, il suffit alors de sélectionner un item. Pour que WMP lise ce fichier, nous transmettons son nom via la propriété AfterUpdate de la zone de liste avec le code
Private Sub Modifiable4_AfterUpdate()
Me![WindowsMediaPlayer0].URL = [Modifiable4]
End Sub
Bon amusement !! - Résultat final
Cliquez ici pour télécharger le fichier zip WindowsMediaPlayer
N'oubliez pas de personnaliser la propriété URL de la vidéo par défaut
Fin