★★★ 是高手就进来 ★★★(200分)

S

siteboy

Unregistered / Unconfirmed
GUEST, unregistred user!
高分请教各位高手,如何动态修改Windows Media Player控件的视频窗口?
一些普通高手均不能解决,原问题见以下地址:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1850558

共300分,另100分在上面地址拿

 
1、使用Windows Media Player控件的接口来实现,没有,
就查看它的SDK;
2、以上不行,那只能利用MS的API,先找到Windows Media Player的窗口
HANDLE,然后利用发送消息的方法来实现。
 
怎么样啊
行不行啊?
 
TO heipi2002:
你搞错了吧,我指的是windows Media Player 而不是delphi自带的那个。
windows Media Player根本是没有DisplatRect属性的。
 
To chnplzh:
1、使用Windows Media Player控件的接口来实现
2.利用MS的API,先找到Windows Media Player的窗口
HANDLE,然后利用发送消息的方法来实现。
具体怎么做法?????有相关文档吗?????
 
用MCIERROR mciSendCommand(
MCIDEVICEID IDDevice,
UINT uMsg,
DWORD fdwCommand,
DWORD_PTR dwParam
);
参数请参照MSDN。
type
PMCI_Anim_Rect_Parms = ^ TMCI_Anim_Rect_Parms;
tagMCI_ANIM_RECT_PARMS = record
dwCallback: DWORD;
rc: TRect;
end;
TMCI_Anim_Rect_Parms = tagMCI_ANIM_RECT_PARMS;
MCI_ANIM_RECT_PARMS = tagMCI_ANIM_RECT_PARMS;
...
var

dwCommand: Longint;
RectParms: TMCI_Anim_Rect_Parms;
WorkR: TRect;
...
WorkR := Rect(...);
dwCommand:= mci_Anim_RECT or mci_Anim_Put_Destination;
RectParms.rc := WorkR;
FError := mciSendCommand( DeviceID, mci_Put, dwCommands, Longint(@RectParms) );
//DeviceID你自己能搞定吧。
 
To tingjie:
DeviceID要怎么搞动,好象delphi有个功能是可以自动生成的,但我都忘了啦!!!![:(]
请赐教。。。。
如果可以的话,最好贴上完整源码(包括uses 部分),好事做到底,送佛送到西,好心你不要只拿几十分,要就300分全拿去吧!
感激不尽!!!!!
 
To tingjie:
还有就是你的程序怎么那么多....省略号呀,这样叫我怎么办?虽然我很苯,但我很有上进心。。。。。
 
OpenParm: TMCI_Open_Parms;
...
mciSendCommand(0, mci_Open, dwCommand, Longint(@OpenParm))

OpenParm.wDeviceID就是DeviceID。
我手上没有现成的代码,刚好马上要出去。你现试着自己写一下吧。
更多的东西请参照 delphi的MMSystem和MPlayer单元以及MSDN;
如果还搞不定,再写代码给你吧。
 
To tingjie:
我在执行到dwCommand:= mci_Anim_RECT or mci_Anim_Put_Destination;这一行就碰钉了。
那个DeviceID是不是注册表中的CLSID:{CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA}

你还是做一个简单的范例给我吧!只要实现在拉动窗口大小时,windows media player ActiveX控件的视频窗口会跟着改变就行了。
谢谢你,希望你是高手中的真正高手,你是我的寄托和希望,感激不尽!!!!

mailto: siteboy@tom.com
 
把你的例子发过来,我来帮你改。
stingjie@yahoo.com.cn
 
我发了,请查收!
 
我来领分来了
WindowMediaPlayer1.DoObjectVerb(-1);
 
超值大奉送[:D]
其实这个答案也适应于其他OCX控件,比如Flash
一直以来关于Flash的AutoReSize都是Hide,Show,Focus来解决的,
但这样做就会有闪烁,效果不好,要无闪烁的AutoReSize
ShockwaveFlash.DoObjectVerb(-1);
 
OH!Very very good!!!!!
想不到,真正的高手就是这样,只要剑一出销,必定见血。真爽!!!!
 
To pihome:
这200分我全部给你了,还有另一贴子的一百分,我也全给你了。
tingjie,heipi2002,小高,还有其它的朋友们,对不起了,那么多分也不能分点给你们。
本来是可以给你们分到一些的,但为了感激解决此问题的朋友,我之前就已承诺加多200分,并全部拱上的。所以。。。。唉!!!!不过你们不但没损失,还学了东西呀。
等我发了达再派些给你们吧!!!谢谢这位朋友,真有你的,看来你就是高手中的高手了。
[:)]
 
接受答案,问题结束!!!
 
我看等不到你发达了,快没分了吧,呵呵!
pihome的方法很好不过不知道为什么啊(这个最要命)
:)学了一小招,降低了得分率,SetFocus最好理解不是吗?呵呵
MP9用过了,没有出现楼主说的问题
哎,不想多说啊,江湖上什么鸟都有啊

http://www.delphibbs.com/delphibbs/dispq.asp?lid=754596
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1379137
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1228022
都有提到过
pihome你的网站什么时候开通啊?
 
对了,我发现这个函数对与所谓的WindowMediaPlayer根本一点必要都没有
哈哈哈哈哈哈哈哈哈哈哈!
 
对于Ole对象,默认定义了几个Verb,如下:
ovShow = -1;
ovOpen = -2;
ovHide = -3;
ovUIActivate = -4;
ovInPlaceActivate = -5;
ovDiscardUndoState = -6;
ovPrimary = -65536;
DoObjectVerb(ovShow)的功用就不用我说了吧,另外一个用得比较多的可能是ovPrimary激活对象
我们也可以自定义Verb,用ObjectVerbs获取,对应WindowsMediaPlayer里的函数是GetObjectVerbs(List: TStrings);

to heipi2002:
>>MP9用过了,没有出现楼主说的问题
>>我发现这个函数对与所谓的WindowMediaPlayer根本一点必要都没有
看来你是没有正确的安装mp9,应该安装wmp.dll里的TWindowsMediaPlayer才对
>>pihome你的网站什么时候开通啊?
看什么时候能放下时间来做吧,至少现在不行[:(!]
 

Similar threads

I
回复
0
查看
758
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部