線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:923
推到 Plurk!
推到 Facebook!

請教如何正確地更改TList的內容

答題得分者是:Windyboy
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-23 10:22:19 IP:61.220.xxx.xxx 未訂閱
小弟想在TList中放入數個儲存圖片的MemoryStream,但是這些Stream是會變動的,小弟試過以下的程式碼,若MemoryStream的內容未變時(Button2未按下)一切正常可顯示其中任一圖片,但是一按下Button2鈕更動MemoryStream內容後就出現了"Jpeg error#52"的錯誤,小弟猜想可能是TList中的pointer指錯地方了,能否請高手們指導一下該如何更正呢?多謝大家的幫助!    //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "Unit1.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { jpgStream1=new TMemoryStream(); jpgStream2=new TMemoryStream(); jpgStream3=new TMemoryStream(); jpgStream4=new TMemoryStream(); jpg_pos = new TList ; jpgStream1->LoadFromFile("d:\\program\\avi_prod\\0000.jpg"); //載入至MemoryStream jpgStream2->LoadFromFile("d:\\program\\avi_prod\\0001.jpg"); jpgStream3->LoadFromFile("d:\\program\\avi_prod\\0002.jpg"); jpgStream4->LoadFromFile("d:\\program\\avi_prod\\0003.jpg"); jpg_pos->Add(jpgStream1); //把MemoryStream分別存入List中 jpg_pos->Add(jpgStream2); jpg_pos->Add(jpgStream3); jpg_pos->Add(jpgStream4); Image1->Stretch=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TJPEGImage *jpg = new TJPEGImage(); jpg->LoadFromStream((TStream*)jpg_pos->Items[StrToInt(Edit1->Text)]); Image1->Canvas->Draw(0,0,jpg); delete jpg; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //小弟想更新MemoryStream的內容 jpgStream1->LoadFromFile("d:\\program\\avi_prod\\0010.jpg"); jpgStream2->LoadFromFile("d:\\program\\avi_prod\\0011.jpg"); jpgStream3->LoadFromFile("d:\\program\\avi_prod\\0012.jpg"); jpgStream4->LoadFromFile("d:\\program\\avi_prod\\0013.jpg"); //想先清除List內容 jpg_pos->Clear(); //重新將新的MemoryStream的pointer指派給TList jpg_pos->Add(jpgStream1); jpg_pos->Add(jpgStream2); jpg_pos->Add(jpgStream3); jpg_pos->Add(jpgStream4); } //---------------------------------------------------------------------------
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-23 10:44:57 IP:61.59.xxx.xxx 未訂閱
void __fastcall TForm1::Button1Click(TObject *Sender) { TJPEGImage *jpg = new TJPEGImage(); ((TStream*)jpg_pos->Items[StrToInt(Edit1->Text)])->Seek(soFromBeginning, 0); jpg->LoadFromStream((TStream*)jpg_pos->Items[StrToInt(Edit1->Text)]); Image1->Canvas->Draw(0,0,jpg); delete jpg; } 加入紅色那行試試, 應該是沒有把Stream的Pos再設為0才會載入JPEG錯誤, 我試過, 這樣就可以正常載入了...^_^...try it. -------------------------- ~天下本無事 庸人自擾之~
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-23 11:49:35 IP:61.220.xxx.xxx 未訂閱
Windyboy謝謝您啦! 我剛才試過了,可以正常顯示了! 我每次使用MemoryStream常常會忘了把Position設回0,才會出現錯誤…
系統時間:2024-04-30 8:57:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!