Realplay大伙肯定用得多啦,我发现它有几个不好的地方:1太大;2老是开机自启动,注册表里删了也不管用;3#¥%@^^@^!#,莫须有吧:)我在网上看到有人用Delphi和RealPlayer ActiveX Control编写RealPlayer播放器的文章,自已一试,果然是好用。贴出来给感兴趣的哥们可以看看。我自己写了VB和VC里RealPlayer ActiveX Control的简单使用方法。一并贴出来。问题不少,要请大伙帮忙解决。
你的机器中必须装有RealPlayer Plus播放器,因为我们要用到其自带的ActiveX控件。
首先,我们要在Delphi中导入所需的ActiveX控件。点击菜单“component->Import ActiveX Control...”打开“Import ActiveX”对话框,在“Import ActiveX”列表框中,我们可以看到Windows中所有注册的AxctiveX控件。选择其中的“RealPlayer ActiveX Control Library(Version 1.0)”控件。然后单击“Install”按钮。
回到Delphi主界面,你会发现在VCL面板中的ActiveX标签中增加了一个名为RealAudio的组件。我们先把它放入窗体中。不过在默认情况中RealAudio组件没有视频播放窗口,也就是只能播放声音。这是我们不愿看到的,这时我们可以在RealAudio组件的Controls属性中添加如下代码:
IMAGEWINDOW,CONTROLPANEL,STATUSBAR
其中:IMAGEWINDOW、CONTROLPANEL、STATUSBAR分别表示显示视频播放窗口、控制条状态条。
添加代码后,我们可以发现控件外观已经改变成了视频播放窗口形状。然后设置Align属性为alClient,使播放窗口可以随窗体的变化而变化,方便大家在观看影视动画时可以随意拉动播放窗口大小。
然后再在窗体中加入TMainMenu组件、TOpenDialog组件各一个。用于选择并打开播放影视文件。双击TMainMenu组件,进入菜单设计器。在这里我们要设计一个菜单项File,及其2个子菜单Open、Exit。设计完毕后,双击Open添加如下代码:
if OpenDialog1.Execute then
begin
RealAudio1.source:=OpenDialog1.FileName;
RealAudio1.doplay; //打开并启动播放器
End;
双击Open添加如下代码:
Application.terminate; //终止程序运行
为了在打开一个文件时,便于用户选择文件,要将OpenDialog组件的Filter属性设置如下:所有媒体文件(*.rm,*.ram,*.ra,*.swf,*.mp3)│*.rm;*.ram;*.ra;*.swf;*.mp3│*.*│*.*。
最后就可以进行编译、运行了。
//*************************************************************
下面是用VB写了一个,呵呵,弟兄们肯定有用VB的吧?:)
打开VB6.0,点击Toolbox->components->选中RealPlayer ActiveX Control Library和Microsoft common dialog control,点击确定按钮后导入。在form1上各画一个刚才导入的控件,用默认的命名,加入一个菜单,有两个项:打开:open ;退出:cancel。RealAudio控件的Controls属性中添加如下代码:IMAGEWINDOW,CONTROLPANEL,STATUSBAR
开始写代码吧:
Private Sub open_Click()
CommonDialog1.Filter = "(*.rm,*.ram,*.ra,*.swf,*.mp3)│*.rm;*.ram;*.ra;*.swf;*.mp3│*.*│*.*"
CommonDialog1.ShowOpen
RealAudio1.Source = CommonDialog1.FileName
RealAudio1.DoPlay
End Sub
Private Sub Form_Resize()
RealAudio1.Width = Form1.Width
RealAudio1.Height = Form1.Height
End Sub
Private Sub cancel_Click()
Unload Me
End Sub
//**********************************************
DELPHI和VB都实现了,VC也写一个玩玩吧,用AppWizard新建一个Dialog based 的工程real,其余为默认设置。选择菜单:project->add to project->components and controls...,点击Registered ActiveX Controls,选择realplayer G2 control,点击insert,close。快看看你的real classes,多了一个RealAudio类,就是它啦。打开对话框编辑器,在real对话框上画一个realplayer G2 control。属性controls设为:IMAGEWINDOW,CONTROLPANEL,STATUSBAR 。运行一试,呵呵,什么也没有??我不知道 为什么,只好把对话框上的realplayer G2 control删掉,换一个办法,在realDlg.h中 #include "realaudio.h",声明一个成员(就在protected:下面吧)CRealAudio* pRealAudio1;
在对话框初始化成员函数BOOL CRealDlg::OnInitDialog()
// TODO: Add extra initialization here添加:
pRealAudio1=new CRealAudio;
CRect rc;
GetClientRect(&rc);
pRealAudio1->Create(NULL,WS_CHILD│WS_VISIBLE,
rc, this, 100);
pRealAudio1->SetControls("IMAGEWINDOW,CONTROLPANEL,STATUSBAR");
在ClassView中右击CRealDlg->add windows message handler...-加入WM_SIZE消息处理函数;
void CRealDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
//添加下面代码:
CRect rc;
GetClientRect(&rc);
//pRealAudio1->MoveWindow(rc);
//改变播放窗口大小,可是出错:指令引用的"0xccccccec"内存。该内存不能为"read".
//所以我把它注释掉了:) 哪位大虾一定要告诉我为什么,以前我就有过好几次这种尴尬。
//但但是这个函数对于对话框是可以的。???
}
导入一个菜单资源IDR_MENU1,设二个菜单项:
ID_MENUITEM_OPEN 打开(O)
ID_MENUITEM_CANCEL 退出(&C)
对话框IDD_REAL_DIALOG的menu属性设为:IDR_MENU1
在CRealDlg类中添加菜单命令处理函数,并写如下代码:
void CRealDlg::OnMenuitemOpen()
{
CString Filter="(*.rm,*.ram,*.ra,*.swf,*.mp3)│*.rm;*.ram;*.ra;*.swf;*.mp3│所有文件│*.*││";
CString path;
CFileDialog fd(TRUE,0,0,OFN_HIDEREADONLY│
OFN_FILEMUSTEXIST│OFN_LONGNAMES,(LPCTSTR)Filter);
if(fd.DoModal()==IDOK)
path=fd.GetPathName();
pRealAudio1->SetSource(path);
pRealAudio1->DoPlay();
}
void CRealDlg::OnMenuitemCancel()
{
this->OnCancel();
}
因为使用到了文件对话框,所以别忘了在CRealDlg.cpp头上#include
可以播放不少格式,但是在的时候,会跳出一个对话框,提示要获取什么软件。呵呵
写了这些,不知道有无遗漏,再联系啦!
改变播放窗口大小的问题解决啦,原因是WM_SIZE事件比WM_INITDIALOG先发生,也就是说RealAudio1还没有创建,当然不能对他进行MoveWindow喽。WM_CREATE是最先发生的,那么我就用一个笨办法:在CRealDlg类里protected:下声明一个bool flag;
然后在int CRealDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 函数里加入flag=0;
再改变函数void CRealDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(flag==1)
{
CRect rc;
GetClientRect(&rc);
pRealAudio1->MoveWindow(rc);
}
flag=1;
}
第一次WM_SIZE事件发生的时候RealAudio1还没有创建,此时flag由0设为1,那么下一次WM_SIZE事件发生时,就可以对RealAudio1进行MoveWindow的*作啦。 |