我初学delphi。在用mediaplayer做播放器,动态创建了一个窗体
procedure TFrm_Main.CreateFrm_Display(const title:string); //创造一个用于播放的子窗体
var
Frm_Display:TFrm_Display;//窗体的名字
begin
   Frm_Display:=TFrm_Display.create(application) ;
   Frm_Display.Caption:=title;
end;
用mediaplayer的display属性将其指定到上面的窗体的panel上无法实现播放
procedure TFrm_Main.SkinButton2Click(Sender: TObject);
begin
OpenDialog1.Filename := '*.avi';
if opendialog1.Execute then
  begin
  frm_main.CreateFrm_Display(opendialog1.FileName);
  
    mediaplayer1.FileName:=Opendialog1.FileName;
    mediaplayer1.Open;
    mediaplayer1.next;
    mediaplayer1.Display:=Frm_Display.Panel1;
    mediaplayer1.Play;
  end;
请问是什么问题?

解决方案 »

  1.   

    mediaplayer1.Display:=Frm_Display.Panel1.handle行吗?
    display应该是指向一个窗口的句柄,即HWND
      

  2.   

    怎么会指向句柄呢?panel的句柄什么意思?
    楼上的不对。如果不是动态创建的窗体就可以,如:
    mediaplayer1.Display:=Frm_Display.Panel1
    Frm_Display不是动态创建的就可以
      

  3.   

    procedure TFrm_Main.CreateFrm_Display(const title:string); //创造一个用于播放的子窗体
    var
    Frm_Display:TFrm_Display;//窗体的名字
    begin
       Frm_Display:=TFrm_Display.create(application) ;
       Frm_Display.Caption:=title;
    end;
    该函数执行完成后Frm_Display 会被释放
    如果你的Frm_Display是一个全局变量的话,

    var
    Frm_Display注释掉。mediaplayer1.Display:=Frm_Display.Panel1;如果这句编译没有错误的话,则Frm_Display肯定是在某个单元中定义的,而且被该单元所引用,因此你的CreateFrm_Display函数中的Frm_Display将成为一个本地变量,函数执行完成后将被释放。
      

  4.   

    我是将Frm_Display定义成了本地变量,mediaplayer1.Display:=Frm_Display.Panel1编译没有问题,我不明白就算是函数执行后被释放掉,但是这个窗体还是已经存在了,请问应该如何调用?谢谢
      

  5.   

    你把下面的代码屏蔽掉看看
    var
    Frm_Display:TFrm_Display;//窗体的名字
      

  6.   

    我试了,可以了。但是我还是不明白是什么意思请hhzh426(春之风)大虾再指点一下。多谢