procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  command:string;
begin
   command:=Athread.connection.readln; //读入命令
     if command='NO' then
       begin
          Listbox1.Items.add('string'); //这句已经执行
          mediaplayer1.play();  //这个语句不执行
       end;
   
end;如果把mediaplayer1.play();  放在另一个事件中就可以了。
procedure TForm1.Button4Click(Sender: TObject);
begin
  mediaplayer1.play(); //完全可以播放音乐
end;大家说说是什么原因。

解决方案 »

  1.   

    不执行应该是不可能的吧,会不会是你的IdTCPServer1Execute触发前,mediaplayer1还没有OPEN
    而Button4Click触发的时候,mediaplayer1已经OPEN?
      

  2.   

    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      command:string;
    begin
       command:=Athread.connection.readln; //读入命令
         if command='NO' then
           begin
              Listbox1.Items.add('string'); //这句已经执行
              //mediaplayer1.play();  //这个语句不执行
    //你这样看看:
              Button4.onclick(self);
           end;
       
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      mediaplayer1.play(); //完全可以播放音乐
    end;
      

  3.   

    pl5th2001(白牙),你的方法已经试过了,还是不行。 flydreams() ,我都是mediaplayer的属性设为true的。
      

  4.   

    问题是怎么在button4的事件上就能发出声音,而在IdTCPServer1Execute就没有声音呢?中间没更改过mediaplayer的属性,都是在object inspector里设好的。
      

  5.   

    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      command:string;
    begin
       command:=Athread.connection.readln; //读入命令
         if command='NO' then
           begin
              Listbox1.Items.add('string'); //这句已经执行
              mediaplayer1.play();  //这个语句不执行
              showmessage('asfdasfd');//如果这句执行,那么上面一句也执行,
          
           end;
       
    end;
      

  6.   

    应该是没有效果吧。 jacket008(§优国优民§) ,这样在运行中会提示错误。'canvas does allow drawing'
      

  7.   

    这个语句其实应该执行了,只是语句执行太快,程序运行时感觉没有播放,如果你用单步执行就可以听到播放的内容。在Button4Click中能够执行是因为在你没停止时,play一直在执行中,所以没问题。关键要看你用play来干什么?如果你想播放完你需要播放的东西再执行下一个语句,我建议你采用windows自带的playsound函数,这个函数可以实现同步、异步等方式的播放,你只需在uses中加入 mmsystem即可,具体函数原型可在 mmsystem中可以找到。