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

API, COM et SDKs Delphi Discussion :

[D7] ActiveX Windows Media Player


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 509
    Par défaut [D7] ActiveX Windows Media Player
    Bonjour,

    j'essaye de reproduire l'exemple d'utilisation de l'ActiveX Windows Media Player de Julien Lelong à cette adresse

    J'ai un problème dans la partie création d'une PlayList :

    EOleException 'Cette interface n'est pas prise en charge'

    Dans la fonction NewMedia de WMPLib_TLB sur l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Result := DefaultInterface.newMedia(bstrURL);
    Savez vous pourquoi ?

    Merci
    A+
    Charly

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    L'activeX propose pourtant bien cette méthode.
    https://docs.microsoft.com/en-us/win...layer-newmedia

    Il y a quoi derrière "DefaultInterface" ?

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Normalement le DefaultInterface devrait être une variable nommé par défaut WindowsMediaPlayer1 lorsque l'on utilise le composant installé depuis la Palette pour le poser sur une forme.

    Une tentative d'allocation dynamique ?

    DefaultInterface est peut-être une propriété du TWindowsMediaPlayer, en général, ce retourne l'interface sous-jacente à l'objet TOleServer, effectivement c'est la structure classique généré par l'importateur d'objet COM, les fonctions public du TWindowsMediaPlayer sont en fait une encapsulation de l'interface pointée par DefaultInterface
    Donc autant directement utiliser newMedia depuis le TWindowsMediaPlayer au lieu de newMedia depuis DefaultInterface
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 509
    Par défaut
    Bonjour,

    merci pour vos réponses

    J'appelle directement NewMedia :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              Video := F_Princ.WMP.newMedia(OpenDialog.FileName);
    WMP est de type TWindowsMediaPlayer

    NewMedia se trouve dans WMPLib_TLB.pas dont voici un extrait :

    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
     
    function newPlaylist(const bstrName: WideString; const bstrURL: WideString): IWMPPlaylist; dispid 41;
    ...
    function TWindowsMediaPlayer.newMedia(const bstrURL: WideString): IWMPMedia;
    begin
      Result := DefaultInterface.newMedia(bstrURL);
    end;
     
    procedure TWindowsMediaPlayer.openPlayer(const bstrURL: WideString);
    begin
      DefaultInterface.openPlayer(bstrURL);
    end;
     
    procedure Register;
    begin
      RegisterComponents(dtlOcxPage, [TWindowsMediaPlayer]);
    end;
    DefaultInterface est une propriété de TWindowsMediaPlayer = class(TOleControl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        property  DefaultInterface: IWMPPlayer4 read GetControlInterface;
    Je ne sais pas comment appeler NewMedia directement ?

    L'exemple posté sur le site par Jp Lelong doit surement être fonctionnel. Je ne dois pas avoir la bonne version de l'activeX ?


    A+
    Charly

  5. #5
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    j'ai eu le même problème dans le passé et javais fait ceci vite fait qui
    m'a permis de contourner le problème :
    [Edit] je viens de faire le teste et ça ne fonctionne plus sur Win7 !!
    j'avais fait ça sous XP.
    Désolé pour la fausse joie

    Alors il semblerait que lors de mon précédent teste je sois tombé sur les deux fichiers
    qui déclenche une erreur "paramètre incorrecte" !!! je ne sais pas encore ce qui pose problème.
    donc le code fonctionne il ajoute le fichier dans la playlist courante en utilisant AddToPlayList.
    ou directement comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WindowsMediaPlayer1.currentMedia := WindowsMediaPlayer1.newMedia(OpenDialog1.FileName);
    [/Edit]
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    unit ExtWMPLib;
     
    interface
    uses WMPLib_TLB, classes;
     
    type
      TWindowsMediaPlayer = class(WMPLib_TLB.TWindowsMediaPlayer)
      private
        function GetAutoPlay: Boolean;
        procedure SetAutoPlay(const Value: Boolean);
      public
        function AddToPlayList(const bstrName: WideString; aPlayList: IWMPPlaylist = nil): Boolean; overload;
        function AddToPlayList(const Names: TStrings; aPlayList: IWMPPlaylist = nil): Boolean; overload;
        function LoadPlayList(const bstrName: WideString; const Create: WordBool = False): Boolean;
        function newPlaylist(const bstrName: WideString{; const bstrURL: WideString}): IWMPPlaylist;
        function newMedia(const bstrURL: WideString): IWMPMedia;
        property AutoPlay: Boolean read GetAutoPlay write SetAutoPlay;
      end;
    implementation
     
    { TWindowsMediaPlayer }
     
    function TWindowsMediaPlayer.AddToPlayList(const bstrName: WideString;
      aPlayList: IWMPPlaylist): Boolean;
    var I: Integer;
    begin
      Result := False;
      if aPlayList = nil then
        aPlayList := DefaultInterface.currentPlaylist;
      if Assigned(aPlayList) then
        {with DefaultInterface do }begin
          for I := 0 to aPlayList.count-1 do
            if bstrName = aPlayList.Item[I].sourceURL then Exit;
          aPlayList.appendItem(newMedia(bstrName));
          Result := True;
        end;
    end;
     
    function TWindowsMediaPlayer.AddToPlayList(const Names: TStrings;
      aPlayList: IWMPPlaylist): Boolean;
    var I: Integer;
      //SL: TStringList;
    begin
      Result := False;
      if not Assigned(Names) then Exit;
      TStringList(Names).Sorted := True;
      for I := 0 to Names.Count-1 do begin
        Result := AddToPlayList(Names[I]);
      end;
    end;
     
    function TWindowsMediaPlayer.GetAutoPlay: Boolean;
    begin
      Result := DefaultInterface.settings.autoStart;
    end;
     
    function TWindowsMediaPlayer.LoadPlayList(
      const bstrName: WideString; const Create: WordBool = False): Boolean;
    begin
      Result := False;
      with DefaultInterface.playlistCollection.getByName(bstrName) do
      begin
        if Count > 0 then begin
          DefaultInterface.currentPlaylist := Item(0);
          Result := True;
        end
        else
        if Create then begin
          DefaultInterface.currentPlaylist := newPlaylist(bstrName);
          Result := True;
        end;
      end;
    end;
     
    function TWindowsMediaPlayer.newMedia(
      const bstrURL: WideString): IWMPMedia;
    begin
      Result := DefaultInterface.mediaCollection.add(bstrURL);
    end;
     
    function TWindowsMediaPlayer.newPlaylist(const bstrName{, bstrURL}: WideString): IWMPPlaylist;
    begin
      Result := DefaultInterface.playlistCollection.newPlaylist(bstrName);
    end;
     
    procedure TWindowsMediaPlayer.SetAutoPlay(const Value: Boolean);
    begin
      DefaultInterface.settings.autoStart := Value;
    end;
     
    end.
    tu déposes un TWindowsMediaPlayer par la palette
    et tu ajoutes cette unité en fin des uses après WMPLib_TLB
    Ex.(uses Windows, Messages, SysUtils, ... , WMPLib_TLB, ExtWMPLib; )
    et ça devrait fonctionner

    Cordialement,
    @+

  6. #6
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 509
    Par défaut
    Merci Cirec,

    je vais tester ta solution.

    En attendant, j'avais crée une Playlist "a la main" sous forme de fichier Txt dont je relis les lignes qui contiennent le nom des vidéos et je joue chaque vidéo dans une boucle.

    A+
    Charly

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ActiveX Windows media player popupmenu
    Par aliwassem dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/02/2010, 19h16
  2. Réponses: 0
    Dernier message: 15/01/2009, 19h50
  3. [MFC] ActiveX Windows Media Player
    Par Philippe320 dans le forum MFC
    Réponses: 0
    Dernier message: 24/11/2008, 10h44
  4. Problème avec l'ActiveX Windows Media Player
    Par sgttiti52 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 10/01/2008, 11h03
  5. Activex Windows Media Player
    Par FabienN dans le forum Access
    Réponses: 16
    Dernier message: 27/05/2006, 22h01

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