如題,以下是滑鼠雙擊歌曲串列ListBox之后的代碼:
void __fastcall TForm1::ListBox1DblClick(TObject *Sender) //雙擊歌曲檔案串列某行
{
MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex];
//將選中的歌曲檔案的路徑送給播放器TMediaPlayer
Label1->Caption=MediaPlayer1->FileName; // Label1顯示歌曲檔案的路徑
MediaPlayer1->DeviceType=dtAutoSelect;// TMediaPlayer自動選擇
MediaPlayer1->Open(); //打開播放器
MediaPlayer1->Play(); //播放歌曲
n=ListBox1->ItemIndex; //歌曲序號
Timer2->Enabled=true;//打開控制Label1的定時器,讓歌曲檔案路徑橫向移動
}
出錯歌曲路徑:
F:\音樂天地\SogouMusic\
C? bé mùa ??ng - Th?y Tiên - ??ng Kh?i.mp3
很多歌曲都可以正常播放,就是跳到幾首歌曲之后就會出現以上錯誤了,警告視窗不停
地彈出來,關都關不掉。根據出錯的歌曲路徑可以看出,大概是歌曲檔案名TMediaPlayer
識別不了吧?我把那首歌曲換成其他正常的名字就可以播放了。。。我是新手,請問各位
有什么辦法處理這種情況?我試過try/catch陳述句,貌似沒什么變化。。。
uj5u.com熱心網友回復:
顯示亂碼的這個歌曲名字到底是什么呢?uj5u.com熱心網友回復:
哈哈,那是一首越南歌,估計是播放器識別不了吧,其他還有一些檔案名字不規則那些也放不了,我都不知道該怎么辦。。。uj5u.com熱心網友回復:
出錯圖片:http://b57.photo.store.qq.com/http_imgload.cgi?/rurl4_b=cdd2897156614242066916be335c62670636f87953c1404c1ab745fb8bee8219b81cc903f2250811120b24cc87f02cb730a5a23fa87f2824c75fc3bafc3e8b44b8aa59023f2041761a4f173a59e7ebdbccd40264
uj5u.com熱心網友回復:
ListBox里面我存的全部是歌曲路徑,不懂怎么篩選出檔案名。uj5u.com熱心網友回復:
看起來, 好像是MediaPlayer不支持Unicode檔案名.2009以后的版本中可能會支持.
uj5u.com熱心網友回復:
簡單方法就是判斷檔案名中是否包含有'?'這個字符.
ListBox1->Items->Strings[ListBox1->ItemIndex].Pos("?") > 0
uj5u.com熱心網友回復:
有什么辦法讓播放器識別不了那首歌曲之后自動跳出到其他地方嗎?uj5u.com熱心網友回復:
暈, 插隊了. 看我6樓回復即可.uj5u.com熱心網友回復:
謝謝了,現在我的程式都寫了那么多了,我想知道那個警告視窗是TMediaPlayer給的嗎?怎么會一直不停啊?
uj5u.com熱心網友回復:
警告視窗是MediaPlayer彈出的. 一直不停的彈, 這個原因不明.uj5u.com熱心網友回復:
記得以前是只彈一次而已的,現在是不是程式寫到了滾動條之后受到太多定時器的影響啊,我屏蔽掉所有定時器,還是那樣。。。
uj5u.com熱心網友回復:
可能是和你的代碼有關系.不過你屏蔽掉檔案名例外的歌曲就行了.
uj5u.com熱心網友回復:
void __fastcall TForm1::Timer4Timer(TObject *Sender)
{
int TheLength;
int mMinutes;
int mSeconds;
int numbe;
int time1,time2,time4,time5;
numbe=ListBox1->ItemIndex;
if(numbe==-1)
{
time1=0;
time2=0;
time4=0;
time5=0;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
}
else
{
MediaPlayer1->TimeFormat=tfMilliseconds;
TheLength=MediaPlayer1->Position/1000;
//mHours=TheLength/3600;
mMinutes=(TheLength%3600)/60;
mSeconds=(TheLength%3600)%60;
time1=(mMinutes%60)/10;
time2=(mMinutes%60)%10;
time4=mSeconds/10;
time5=mSeconds%10;
Label4->Caption=time1;
Label5->Caption=time2;
Label6->Caption=time4;
Label7->Caption=time5;
MediaPlayer1->TimeFormat=tfMilliseconds;
ImageTrack->Canvas->Brush->Color=clBlack;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width,ImageTrack->Height);
ImageTrack->Canvas->Brush->Color=clMaroon;
ImageTrack->Canvas->Rectangle(0,0,ImageTrack->Width*(float(MediaPlayer1->Position)/float(MediaPlayer1->Length)),ImageTrack->Height);
}
}
我找出原因啦,應該是這個進度條的定時器影響,因為之前讀取歌曲的時候失敗了,但是這個定時器的TheLength=MediaPlayer1->Position/1000;陳述句一直執行,所以才會不停地彈出警告,現在只彈一次警告了,算是好多了,呵呵,謝謝妖哥,以后多多關照啊。
uj5u.com熱心網友回復:
解決了就好.
uj5u.com熱心網友回復:
哎呀,我就是想看這個警告 No MCI device open 是怎么消除的。。。。。最后還是沒消除啊轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137606.html
標籤:基礎類
