mediaplayer.play执行后,指定做播放窗口的form的位置会自动向左上角偏移几个像素?(200分)

  • 主题发起人 主题发起人 littley
  • 开始时间 开始时间
L

littley

Unregistered / Unconfirmed
GUEST, unregistred user!
初始设定 mediaplayer1.display:=form2.panel1;
mediaplayer1.displayrect:=form2.panel1.clientrect;

在另一个form1的button1.click事件: form2.show;
form1.button2.click事件: form2.mediaplayer.play;
我发现依次单击form1的button1和button2,在mediaplayer播放视频文件时,form2会
自动向左上角跳跃几个像素,这使屏幕有闪烁,更重要的是我有其他指定位置与它配合的
form,因此我想避免播放窗体form2不向左上角偏移,应如何做?最好能告诉我为什么会
有这种奇怪的现象?
 
更正一句话:
》》》因此我想避免播放窗体form2不向左上角偏移
更正为:
因此我想让播放窗体form2不向左上角偏移
 
应该不会吧,我试了的,没问题啊,窗体不会动啊
是不是你的form2的设置有问题?
 
zhhc及其他大虾:
如果有兴趣的话,留下一个EMAIL,我把我的简化版的demo发给你们,才几十K。

另:我测试的环境是: D6 + WINDOWS98第二版 +98第二版自带的媒体播放机版本。
 
zhaihaichen@21cn.com
 
报上你的DX环境,可能跟他有关.
另外,依你看动了几个像素?
将左上角的坐标定为4或16的整数倍(相对于屏幕而不是窗体)试试.
 
zhhc:
这就给你发过去。

leechange:
我在dx7.0中文版、dx6.0中文版均出现这个问题。
 
又leechange:
我肉眼看感觉偏移了有4、5个像素。另外你的建议
》》“左上角的坐标定为4或16的整数倍(相对于屏幕而不是窗体)试试.”
对我来说是不行的,我的程序要求能将窗口定位在任意位置。
 
各位大侠:
我将我的程序说清楚一点。
////////////////////////////////////////////////////////////////////
form1只有两个button,click事件方法如下

procedure TForm1.Button1Click(Sender: TObject);
begin

form2.show;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin

form2.MediaPlayer1.Open;
form2.MediaPlayer1.DisplayRect:=form2.Panel1.ClientRect;
form2.mediaplayer1.play;
end;


//////////////////////////////////
form2的情况
form2.borderstyle=bsNone。 //一定要设定,否则看不到我说的情况
有一个panel1,
panel1.align=alClient;
panel1.bevelinner=bvnone;
panel1.bevelouter:=bvnone;
有一个mediaplayer1,
mediaplayer1.visible:=false;
meidaplayer1.display:=panel1;
mediaplayer1.autoopen:=false;
mediaplayer1.filename:='C:/Program Files/Borland/Delphi6/Demos/CoolStuf/cool.avi';
//后面这一句请各位根据你的具体情况设定其他任意一个视频文件。

form2无任何事件方法
 
如果只要源码的话,只有4K,大家有兴趣看一下是怎么回事的话,留下EMAIL地址。
 
zhhc、leechange:
谢谢你们!正如你们所说,左上角坐标置为4的倍数则不存在这个问题,而且只有AVI格式的
文件有这个怪现象。现在我想知道
1、为什么有这种怪现象?
2、我以前的解决方法是执行mediaplayer1.play后,再次强行设置FORM的位置。这使屏幕
有明显的闪烁现象。各位有什么更好的方法?
 
这个是AVI格式文件显示的特殊要求,它好像以4个点为边界进行对齐,也许为了提高速度吧。
我试了一下,先执行Play再显示Form2,位置也是不会变的,好像MediaPlayer在每次开始Play的时候会调整Form的位置
 
看看我的做法:
procedure TForm1.N4Click(Sender: TObject);//全屏播放
begin

form1.Hide;//隐藏主窗体
form3.Show;//显示全屏的窗体
form3.Left:=0;
form3.Top:=0;
form3.Width:=Screen.Width;
form3.Height:=screen.Height;
form3.BorderStyle:=bsnone;
form1.MediaPlayer1.Display:=form3.Panel1;
mediaplayer1.DisplayRect:=mediaplayer1.Display.ClientRect;
end;


procedure TForm3.N1Click(Sender: TObject);//恢复窗体
begin

Form1.Show;
form3.Hide;
form3.Close;
form1.MediaPlayer1.Display:=form1.panel1;
form1.mediaplayer1.DisplayRect:=form1.mediaplayer1.Display.ClientRect;

end;



这个方法很简单,希望可以帮您解决问题!
 
to zhhc:
我的方法类似于
form2.mediaplayer1.displayrect:=form2.panel1.clientrect;
mediaplayer1.play;
form2.left:=......
form2.top:= ........
这样是可以的,但屏幕有明显闪烁感。

to laj001:
谢谢!你的代码与我的情况不太一致。我的情况有点类似超级解霸,一个控制窗体,一个播放
窗体,播放窗体默认为1/4屏幕大小。在使用默认大小的情况下,直接按播放按钮播放avi文件
播放窗口就会向左上角偏移。
 
有兴趣你的问题,请发你的demo。linsbv3031@163.com
 
linsb:
不好意思,我今天才收到一封网易的“你的信件无法到达目的地”的邮件,刚刚又把
程序给你发了几遍 :)
 
to littley
对不起,地址错了!linsb3031@163.com
 
谢谢大家!
 
后退
顶部