Discussions related to Visual Prolog
User avatar
Tonton Luc
VIP Member
Posts: 204
Joined: 16 Oct 2001 23:01

Media Player ocx - nedd help

Unread post by Tonton Luc »

Hi,

I add a new Com object from msdxm.ocx (Media Player) in my project and the following code works fine until the last line "play". I'm not sure if my approach is correct (?) :

Code: Select all

clauses     onFileNew(_Source, _MenuTag):-         mainexe::getFileName(Root,_),         Nom = "son.WMA",         Fic = fileName::setPath(Nom,Root),         if file::existFile(Fic) then             MP = mediaPlayer::new(),             MP:aboutBox(),             Ready = MP:get_ReadyState(),             stdio::write(Ready),stdio::nl,             MP:predicate_Open(Nom),             Ready3 = MP:get_ReadyState(),             stdio::write(Ready3),stdio::nl,             MP:set_CurrentPosition(5),             Pos = MP:get_CurrentPosition(),             stdio::write(Pos),stdio::nl,             MP:set_DisplayMode(mmm_typeRepository_MediaPlayer::mpTime),             MP:set_ShowDisplay(true),             F2 = MP:get_FileName(),             stdio::write(F2),stdio::nl,             ClickToPlay = MP:get_ClickToPlay(),             stdio::write(ClickToPlay),stdio::nl,             AutoStart = MP:get_AutoStart(),             stdio::write(AutoStart),stdio::nl,             MP:play() % !!! not ok         end if,         !.
========================================
Dump: 2013/09/20 19:17:14
----------------------------------------
Exception: unknownException (com/visual-prolog/com/exceptionHandling/exceptionHandling_exception)

Unknown exception

HRESULT code = 2148139013
HRESULT hex code = 800A0005
hresultDescription = Unknown exception
Predicate name = play

raised() 2013/09/20 19:17:08
ThreadId=228
ClassInfo: iMediaPlayer_import
Any :idea:
User avatar
Thomas Linder Puls
VIP Member
Posts: 1398
Joined: 28 Feb 2000 0:01

Unread post by Thomas Linder Puls »

I have no experience with this. But I have seen that others uses windows\system32\wmp.dll.
Regards Thomas Linder Puls
PDC
User avatar
Tonton Luc
VIP Member
Posts: 204
Joined: 16 Oct 2001 23:01

Unread post by Tonton Luc »

Hi,

I create a new COM object from wmp.dll and start to write the following code (VP 7.2) :

Code: Select all

constants     idc_wmp_ctl = 1000.   predicates     onShow : window::showListener. clauses     onShow(_Source, _Data):-         Rct = vpi::winGetClientRect(This:getVpiWindow()),         Rct = rct(Gauch,Haut,Droit,Bas),         New_rct = rct(Gauch, Haut,Droit,Bas-50),         Container = activeXContainer::new(This:getVpiWindow()),         Obj=Container:createControl(windowsMediaPlayer::componentClassID,New_rct,idc_wmp_ctl),         not(Obj=uncheckedConvert(iOleObject_native,null)),         !,         ?????         !.     onShow(_Source, _Data).
This part of code works fine and the player is displaying fine in my form, but how to play an MP3 file now ? I don't unsderstand which code do I use.
Any :idea:
User avatar
Tonton Luc
VIP Member
Posts: 204
Joined: 16 Oct 2001 23:01

Unread post by Tonton Luc »

I've found the good code :

Code: Select all

        _Rep_Core = Obj:queryInterface(iWMPCore_native::iid,IUnk_Core),         Core = uncheckedConvert(iWMPCore_native,IUnk_Core),         _ = Core:set_url("C:\\My_file.MP3"),         _Rep = Obj:queryInterface(iWMPControls_native::iid,IUnk),         Ctl_controls = uncheckedConvert(iWMPControls_native,IUnk),         _ = Ctl_controls:play(),
:roll:
User avatar
Tonton Luc
VIP Member
Posts: 204
Joined: 16 Oct 2001 23:01

Unread post by Tonton Luc »

Hi,

How to create a WMP PositionChange event ?
The following code generate an error :

Code: Select all

        _Rep_status = ctl_principal:queryInterface(iWMPEvents_native::iid,IUnk_events),         Cctl_events = uncheckedConvert(iWMPEvents_native,IUnk_events), %        Cctl_events:positionChange(Old,New),
error c603: The flow pattern '(o,o)' does not exist for 'iWMPEvents_native::positionChange/2'
In iWMPEvents_native.i :

Code: Select all

predicates     positionChange : (real OldPosition, real NewPosition)  language stdcall.
I would like to reproduce the WMP duration bar and I need to recover the CurrentPosition during a file is playing. So I supose I need to create a PositionChange event...
User avatar
Thomas Linder Puls
VIP Member
Posts: 1398
Joined: 28 Feb 2000 0:01

Unread post by Thomas Linder Puls »

Events comes the other way, from the Active/X control to your program, so it is your program that should implement the iWMPEvents interface and then register it as a (so called) event sink.

To implement the iWMPEvents interface you can for example implement a class like this:

Code: Select all

class wmpEvents : iWMPEvents_native ... end class wmpEvents

Code: Select all

implement wmpEvents inherits iWMPEvents_export     supports iWMPEvents_impl   clauses     iWMPEvents_positionChange(OldPosition, NewPosition) :-         % This is called when the position changes ... end implement wmpEvents
Somewhere you should create aninstance of this class and pass it to some event listener registration function (like adviseWMPEvents).
Regards Thomas Linder Puls
PDC
User avatar
Tonton Luc
VIP Member
Posts: 204
Joined: 16 Oct 2001 23:01

Unread post by Tonton Luc »

Hi,

I'm not sure to understand what I need to do (sorry).
So I've just created a new class named "wmpEvents" in my project :

Code: Select all

class wmpEvents : iWMPEvents_native     open core   predicates     classInfo : core::classInfo.     % @short Class information  predicate.     % @detail This predicate represents information predicate of this class.     % @end   end class wmpEvents
and a new wmpEvents.pro like :

Code: Select all

implement wmpEvents inherits iWMPEvents_export     supports iWMPEvents_impl     open core   constants     className = "TaskWindow/wmpEvents".     classVersion = "".   clauses     classInfo(className, classVersion).       iWMPEvents_positionChange(_OldPosition, _NewPosition) :- %        settext(toString(NewPosition)),         !.     iWMPEvents_openStateChange(_NewState).     iWMPEvents_playStateChange(_NewState).     iWMPEvents_audioLanguageChange(_LangID).     iWMPEvents_statusChange().     iWMPEvents_scriptCommand(_ScType, _Param).     iWMPEvents_newStream().     iWMPEvents_disconnect(_Result).     iWMPEvents_buffering(_Start).     iWMPEvents_error().     iWMPEvents_warning(_WarigType, _Param, _Descriptio).     iWMPEvents_endOfStream(_Result).     iWMPEvents_markerHit(_Markerum).     iWMPEvents_durationUnitChange(_NewDuratioUit).     iWMPEvents_cdromMediaChange(_Cdromum).     iWMPEvents_playlistChange(_Playlist, _Change).     iWMPEvents_currentPlaylistChange(_Change).     iWMPEvents_currentPlaylistItemAvailable(_BstrItemame).     iWMPEvents_mediaChange(_Item).     iWMPEvents_currentMediaItemAvailable(_BstrItemame).     iWMPEvents_currentItemChange(_PdispMedia).     iWMPEvents_mediaCollectionChange().     iWMPEvents_mediaCollectionAttributeStringAdded(_BstrAttribame, _BstrAttribVal).     iWMPEvents_mediaCollectionAttributeStringRemoved(_BstrAttribame, _BstrAttribVal).     iWMPEvents_mediaCollectionAttributeStringChanged(_BstrAttribame, _BstrOldAttribVal, _BstrewAttribVal).     iWMPEvents_playlistCollectionChange().     iWMPEvents_playlistCollectionPlaylistAdded(_BstrPlaylistame).     iWMPEvents_playlistCollectionPlaylistRemoved(_BstrPlaylistame).     iWMPEvents_playlistCollectionPlaylistSetAsDeleted(_BstrPlaylistame, _VarfIsDeleted).     iWMPEvents_modeChange(_Modeame, _NewValue).     iWMPEvents_mediaError(_PMediaObject).     iWMPEvents_openPlaylistSwitch(_PItem).     iWMPEvents_domainChange(_StrDomain).     iWMPEvents_switchedToPlayerApplication().     iWMPEvents_switchedToControl().     iWMPEvents_playerDockedStateChange().     iWMPEvents_playerReconnect().     iWMPEvents_click(_NButton, _NShiftState, _FX, _FY).     iWMPEvents_doubleClick(_NButton, _NShiftState, _FX, _FY).     iWMPEvents_keyDown(_NKeyCode, _NShiftState).     iWMPEvents_keyPress(_NKeyAscii).     iWMPEvents_keyUp(_NKeyCode, _NShiftState).     iWMPEvents_mouseDown(_NButton, _NShiftState, _FX, _FY).     iWMPEvents_mouseMove(_NButton, _NShiftState, _FX, _FY).     iWMPEvents_mouseUp(_NButton, _NShiftState, _FX, _FY).   end implement wmpEvents
and when I compile, I've this following error :
error c659: Inherited class 'iWMPEvents_export' is not initialized
:?:
Post Reply