IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

A partir de la fenêtre "2", lancer une procédure de lecture de son présente sur la fenêtre "1"


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut A partir de la fenêtre "2", lancer une procédure de lecture de son présente sur la fenêtre "1"
    Bonjour,

    J'ai, dans ma fenêtre principale, une procédure de lecture de sons "interface".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Imports WMPLib
     
    Public WithEvents Player As New WMPLib.WindowsMediaPlayer
     
    PlayFile("c:\son1.wav")
     
    Private Sub PlayFile(ByVal url As String)
      Player = New WMPLib.WindowsMediaPlayer
      Player.URL = url
      Player.controls.play()
    End Sub
    Il y a 8 sons au total, et ils doivent être aussi utilisé par d'autres fenêtre de mon apllication.
    Le problème, c'est que je ne peux pas faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MainWindow.PlayFile("c:\son1.wav")
    Erreur: Reference to a non-shared member requires an object reference.

    Ma question:
    Comment puis je lancer des sons, dont toutes les procédures d'initialisation et de lecture sont présentes sur "MainWindow", depuis une autre fenêtre (pour éviter de devoir le refaire pour CHAQUE fenêtre)

    Merci pour votre aide!!

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il y a moyen d'appeler une méthode d'une autre fenetre

    néanmoins si un code n'est pas lié à une fenetre, il suffit de ne pas le mettre dans le code d'une fenetre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Sound
     
      public shared Sub PlayFile(ByVal url As String)
         ....
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    je te conseil aussi d'utiliser une classe comme la indique pol63 mais si tu insiste à utiliser ta méthode tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Imports WMPLib
     
     
    Shared Public Sub PlayFile(ByVal url As String)
    WithEvents Player As New WMPLib.WindowsMediaPlayer
      Player = New WMPLib.WindowsMediaPlayer
      Player.URL = url
      Player.controls.play()
    End Sub

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il y a moyen d'appeler une méthode d'une autre fenetre

    néanmoins si un code n'est pas lié à une fenetre, il suffit de ne pas le mettre dans le code d'une fenetre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Sound
     
      public shared Sub PlayFile(ByVal url As String)
         ....
    J'aimerais faire "comme il faut"...mais étant un peu débutant puis-je te demander de développer un peu plus comment on construit/utilise cette "Class" ?
    Comment, depuis la fenêtre 1, lancerait-on alors la lecture?
    Et comment depuis la fenêtre 2?

    Merci pour ton aide...et ta compréhension! ;-)

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    un cours : http://plasserre.developpez.com/

    il y a beaucoup de concepts à connaitre en .net, certains sont complexes, mais les bases sont rapides à comprendre

    Shared devant un membre signifie qu'il peut etre utilisé sans instance, de n'importe où (partagé pour toutes les instances dans les faits)

    on peut alors l'appeler via nom_de_la_classe.nom_du_membre

    il convient de connaitre aussi le vocabulaire (classe, instance, membre (=sub/function/property/field(=variable)), portée des membres (private/protected/friend/public * shared) etc...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    Si je vous comprends bien, vous voulez dire que si dans la fenêtre 1 j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Sound
      Public Shared Sub PlayFile(ByVal url As String)
        Player = New WMPLib.WindowsMediaPlayer
        Player.URL = url
        Player.controls.play()
      End Sub
    End Class
    Je pourrai faire, depuis la fenêtre 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sound.PlayFile("c:/music.mp3")
    ( ou Window1.Sound.PlayFile("c:/music.mp3") ?)

    Je ne peux pas le tester car ne suis pas devant Visual Studio
    Merci!!

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le mieux est de faire clic droit sur le projet / ajouter une classe
    tu auras un fichier vide et tu crées ta classe avec le nom que tu veux, et la méthode shared

    depuis window1 ou window2 tu pourras faire le_nom_de_la_classe.le_nom_de_la_sub_shared


    il est possible de mettre une classe dans une autre, donc tu peux mettre la classe sound dans window1, mais comme je l'ai plus tot, il ne faut pas mélanger tout
    faire du son n'est pas lié à ta window1 et n'a donc rien à y faire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    Pol63,
    Merci pour ta réponse, qui me permet de régler mon problème...et qui m'ouvre de nouveaux horizons ;-)

    J'ai donc une classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Class UISound
        Public Shared WithEvents musicPlayer As New WMPLib.WindowsMediaPlayer
        Public Shared Sub PlayMusic(ByVal url As String)
            musicPlayer = New WMPLib.WindowsMediaPlayer
            musicPlayer.URL = url
            volumeMusic()
            musicPlayer.controls.play()
        End Sub
        Public Shared Sub volumeMusic()
            musicPlayer.settings.volume = My.Settings.music_volume / 10
        End Sub    
        Public Shared Sub musicPlayer_MediaEnded(ByVal NewState As Integer) Handles musicPlayer.PlayStateChange
            If NewState = WMPLib.WMPPlayState.wmppsStopped Then
                musicPlayer.close()
            End If
        End Sub
    End Class
    Dans ma fenêtre principale j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub playMusic()
                Dim random As New Random()
                Dim rndnbr As Integer
                Dim musicLink As String
                rndnbr = random.Next(0, musicList.Count)
                musicLink = musicList(rndnbr)
                UISound.PlayMusic(musicLink)
    End Sub
    Qui va chercher dans une liste de lecture une musique de façon aléatoire, et qui lance la lecture par ma classe UISound

    J'ai dans la classe une méthode prévue pour lorsque la musique se termine.
    Mais comment puis-je alors rappeler le Sub playMusic() de la fenêtre principale (pour qu'il pioche un nouveau morceaux et relance une lecture)
    ?
    A moins que cette détection de fin de musique doive se faire directement depuis la fenêtre principale?

    Merci!!!

    PS: Une dernière chose si tu le veux bien: je m'aperçois que je n'ai plus besoin de 'Imports WMPLib' en en-tête. Pourrais tu me dire rapidement pourquoi la librairie n'a plus besoin d'être importée?

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ajouter en référence une dll permet d'utiliser ce quelle contient (classes et autres)

    le mot clé imports n'est pas lié du tout à ca, il sert juste à ne pas préfixer par les namespace



    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim b as new sytem.drawing.bitmap
    si on met imports syste.drawing en haut on peut juste écrire
    dans les 2 cas il faut que system.drawing soit en référence (ca l'est par défaut sur les projet de type windows forms)


    quand à la détection de fin de son, si tu veux que quand quelque chose appelle uisound.playmusic ca ne s'arrete pas tu peux le gérer dans uisound
    tu déclares withevents, ce qui veut dire que tu veux pouvoir gérer les évènements sur l'objet, il y a peut etre des events qui avertissent de la fin de lecture ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Par défaut
    si tu veux que quand quelque chose appelle uisound.playmusic ca ne s'arrete pas tu peux le gérer dans uisound
    tu déclares withevents, ce qui veut dire que tu veux pouvoir gérer les évènements sur l'objet
    C'est déja le cas, non?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class UISound
        Public Shared WithEvents musicPlayer As New WMPLib.WindowsMediaPlayer

    il y a peut etre des events qui avertissent de la fin de lecture ...
    Oui, c'est cela, non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Shared Sub musicPlayer_MediaEnded(ByVal NewState As Integer) Handles musicPlayer.PlayStateChange
            If NewState = WMPLib.WMPPlayState.wmppsStopped Then
                musicPlayer.close()
            End If
    End Sub
    Peux tu m'aider encore un peu...on n'en est pas loin.
    (Rappel: Je veux que quand le morceau lancé par la classe est terminé. La form1 en soit avertie et relance une nouveau morceau)

    Merci!!

Discussions similaires

  1. [AC-2010] Lancer une procédure événementielle à partir d'une macro
    Par JLDunkerque dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/02/2015, 14h14
  2. Passage d'un paramètre avec quote pour une procédure dynamique
    Par dcarroz dans le forum Développement
    Réponses: 7
    Dernier message: 26/01/2010, 11h06
  3. Réponses: 12
    Dernier message: 08/08/2008, 11h03
  4. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo