动态创建窗体和MediaPlayer后怎么Free掉的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 cc_cn
  • 开始时间 开始时间
C

cc_cn

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
procedure TForm1.Button1Click(Sender:TObject);
var
newfrm:TForm;
Media:TMediaPlayer;
begin
newfrm:=TForm.Create(nil);
newfrm.Parent:=nil;
Media:=TMediaPlayer.Create(newfrm);
Media.Parent:=newfrm;
Media.Display:=newfrm;
Media.FileName:='c:/1.mpg';
Media.Open;
Media.Play;
end;
现在有个问题,就是关掉窗体后图像是没了,但还有声音,我想这肯定是窗体只是关闭而没free掉的原因,但具体怎么解决这个问题还请高手指点
为防止理解问题出错还请到下面的链接看一下:http://bbs.2ccc.com/topic.asp?topicid=181786
 
代码如下:
procedure TForm1.Button1Click(Sender:TObject);
var
newfrm:TForm;
Media:TMediaPlayer;
begin
newfrm:=TForm.Create(nil);
newfrm.Parent:=nil;
Media:=TMediaPlayer.Create(newfrm);
Media.Parent:=newfrm;
Media.Display:=newfrm;
Media.FileName:='c:/1.mpg';
Media.Open;
Media.Play;
end;
现在有个问题,就是关掉窗体后图像是没了,但还有声音,我想这肯定是窗体只是关闭而没free掉的原因,但具体怎么解决这个问题还请高手指点
为防止理解问题出错还请到下面的链接看一下:http://bbs.2ccc.com/topic.asp?topicid=181786
 
你关闭前是否应该关闭:media.close !????
因为你窗体和控件全都是手工创建的,当然也需要手工释放/
 
对,我知道,我就是不知道关闭的代码该写在哪儿,有很多人这么说的,所以请下面要回答的朋友先到那个链接看一下,就知道我说的是什么意思了
 
....
procedure xxx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action = caFree;
end;
...
newfrm.Parent:=nil;
newfrm.onclose = FormClose;
Media:=TMediaPlayer.Create(newfrm);
...
 
楼上的能解释一下Action:=caFree;这句吗,我看不懂
 
caNone The form is not allowed to close, so nothing happens.
caHide The form is not closed, but just hidden. Your application can still access a hidden form.
caFree The form is closed and all allocated memory for the form is freed.
caMinimize The form is minimized, rather than closed.

To close the form and free it in an OnClose event, set Action to caFree.
一般form的默认值是caHide
 
ok,解决了,但我还有个小疑问,这样free掉,会不会出错,newfrm在被free掉前会自动free掉media,如果media在播放视频对free这个操作影响不大吧
 
不会,Form free的时候,会先自动free form上的控件。
 
后退
顶部