類似幻燈片播放-只能47張 |
答題得分者是:jow
|
mirood
一般會員 發表:10 回覆:27 積分:7 註冊:2007-02-28 發送簡訊給我 |
寫個一個類似幻燈片播放~
但是只能撥放到47張~ 之後卻要重來~ 這是甚麼問題呢? 會不會因為我使用CGauge元件導致的呢? 請問要怎麼解決? 謝謝各位大家! [code cpp] unsigned int IMG_star=1; unsigned int IMG_end=2; AnsiString pp,IMG_name="Image"; CGauge1->MaxValue=IMG_end; CGauge1->MinValue=IMG_star; if(IMG_star>=IMG_end) { IMG_star=1; } do { pp=IMG_name IMG_star ".jpg"; if(fopen(pp.c_str(),"r")!=NULL) { Form2->Image1->Picture->LoadFromFile(pp); Form2->Show(); Application->ProcessMessages(); Mask_star ; CGauge1->Progress ; Form1->Show(); Application->ProcessMessages(); } else { IMG_star ; CGauge1->Progress ; } } while(IMG_star!=Mask_end); if(IMG_star==IMG_end) { Form2->Close(); Form1->Show(); ShowMessage("END"); } [/code] |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
看你的程式碼, 似乎達不到你的需求, 而且也有些問題?!
以下是一些個人的淺見, 提供你參考.... (1)以do-while loop 持續播放圖檔, 而沒有加上delay時間 (2)if(fopen(pp.c_str(),"r")!=NULL), 有開檔而沒關檔動作 (3)以檔名檢查圖檔是否存在, 以FileExists()為之, 不需要開啟檔案 (4)Form1, Form2 不知道為何要放到迴圈裡, 多次叫用Show() (5)叫用 Application->ProcessMessages(); 兩次也好像有點多餘 程式碼僅供參考 [code cpp] //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { unsigned int IMG_star=1; unsigned int IMG_end =47; unsigned long delay = 1000 / 30; //每秒播放30張 AnsiString IMG_name="Image"; CGauge1->MinValue=IMG_star; CGauge1->MaxValue=IMG_end; Form1->Hide(); try{ Form2->Show(); try{ AnsiString fn; do{ fn.sprintf("%s%d.jpg", IMG_name, IMG_star); if(FileExists(fn)){ Form2->Image1->Picture->LoadFromFile(fn); Application->ProcessMessages(); Sleep(delay); } CGauge1->Progress ; CGauge1->Update(); IMG_star ; }while(IMG_star<=IMG_end); } __finally{ Form2->Hide(); } } __finally{ Form1->Show(); } } //--------------------------------------------------------------------------- [/code] |
mirood
一般會員 發表:10 回覆:27 積分:7 註冊:2007-02-28 發送簡訊給我 |
為甚麼我原始的程式~
總是只能跑47張圖~ 超過之後就不會播放呢?! 謝謝上一位的指導~ [code cpp] AnsiString pp,IMG_name="Img"; unsigned int IMG_star=1; unsigned int IMG_end =200; Memo3->Lines->Add(Now()); CGauge1->MaxValue=IMG_end; CGauge1->MinValue=IMG_star; if(IMG_star>=IMG_end) { IMG_star=1; Memo3->Clear(); } do { //pp=IMG_name IMG_star ".jpg"; pp.sprintf("%s%d.jpg", IMG_name, IMG_star); //if(fopen(pp.c_str(),"r")!=NULL) if(FileExists(pp)) { Form1->Hide(); Form2->Image1->Picture->LoadFromFile(pp); Form2->Show(); Application->ProcessMessages(); IMG_star ; CGauge1->Progress ; Form1->Show(); Application->ProcessMessages(); } else { IMG_star ; CGauge1->Progress ; } } while(IMG_star!=IMG_end); [/code] |
mirood
一般會員 發表:10 回覆:27 積分:7 註冊:2007-02-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |