如何秀圖 |
尚未結案
|
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
frankh 您好: 下列這一篇可先參考一下:
如何把目錄內的圖(jpg,bmp)秀在陣列圖板內?
http://delphi.ktop.com.tw/topic.php?topic_id=58913
7 天天敲鍵盤 v 時時按滑鼠 8
|
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
frankh 您好: 雖然該範例是寫成您描述的運作方式,但是您可以在 Form 的 OnCreate 事件中,直接指定 FileListBox 指向特定目錄,例如:
FileListBox1->Directory = "C:\\Share Folder\\Pictures\\";這樣子就可以在程式執行之後,立即顯示出指定目錄內的圖檔。 那支範例程式其實已經算是很小的了,慢慢試著將範例修改成您所想要的運作方式,在修改的過程中,您就會瞭解各個元件的運作方式,以及設定成不同參數時的差異,如果有碰到難題或是有不懂的地方可以提出來。 7 天天敲鍵盤 v 時時按滑鼠 8 |
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
RedSnow您好:
FileListBox1->Directory = "C:\\Share Folder\\Pictures\是在FileListBox直接指定...但是我如果連FileListBox都不要設..只想當程式執行時...listview直接都可以匯入我的資料夾的圖片...那我該怎麼做?
引言: frankh 您好: 雖然該範例是寫成您描述的運作方式,但是您可以在 Form 的 OnCreate 事件中,直接指定 FileListBox 指向特定目錄,例如:FileListBox1->Directory = "C:\\Share Folder\\Pictures\\";這樣子就可以在程式執行之後,立即顯示出指定目錄內的圖檔。 那支範例程式其實已經算是很小的了,慢慢試著將範例修改成您所想要的運作方式,在修改的過程中,您就會瞭解各個元件的運作方式,以及設定成不同參數時的差異,如果有碰到難題或是有不懂的地方可以提出來。 7 天天敲鍵盤 v 時時按滑鼠 8 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
frankh 您好: 給您一個範例好了,縮圖大小、縮圖底色、讀取目錄....等設定項目我都擺在程式的開始處,請您依據您的需求自行修改,物件名稱也請自行修改成您自己程式內所設定物件的名稱,以下程式已經考慮到縮圖的顯示比例,以及小圖的居中顯示....等,適用性已經很高了,但是針對不同需求時仍有加強的空間,我也在程式內已經盡可能的加註了說明,希望您能看懂:
Screen->Cursor = crHourGlass; const ThumbWidth = 92; // 縮圖寬度 const ThumbHeight = 69; // 縮圖高度 TColor bkColor = clSilver; // 縮圖的底色 (圖檔尺寸小於縮圖框尺寸時才會顯示出來) AnsiString GoDir = "c:\\my temp"; // 要處理縮圖的目錄位置 chdir(GoDir.c_str()); // 切換到指定目錄去 ListView3->Items->Clear(); // 清除 ListView 的所有內容 ListView3->Items->BeginUpdate(); // 作此設定可讓處理速度較為快些 ImageList3->Clear(); // 清除 ImageList 的所有內容 ImageList3->Width = ThumbWidth; // 設定 ImageList 存放圖像的寬度 ImageList3->Height = ThumbHeight; // 設定 ImageList 存放圖像的高度 TSearchRec Sr; // 設 Sr 為存放檔案資訊的結構變數 AnsiString FileName; // 設定檔案名稱之用的暫存變數 AnsiString FileExt; // 存放檔案的副檔名 int done = FindFirst("*.*", faDirectory | faAnyFile, Sr); while (done == 0) { Application->ProcessMessages(); if (!(Sr.Attr & faDirectory)) { // 如果是檔案 FileName = Sr.Name; // 取得檔案名稱 FileExt = ExtractFileExt(FileName).UpperCase(); // 取得檔案的副檔名,並轉為大寫字樣 // 若檔案類型為 .bmp, .jpg, .jpeg, .gif 才做成縮圖並顯示於 ListView 上 if (FileExt == ".BMP" || FileExt == ".JPG" || FileExt == ".JPEG" || FileExt == ".GIF") { TListItem* Item = ListView3->Items->Add(); // 添加 ListView 項目 Item->Caption = AnsiString(FileName); // 設定 ListView 項目的標題為檔案名稱 Graphics::TBitmap *Bitmap = new Graphics::TBitmap(); // 暫存之用的 Bitmap Bitmap->PixelFormat = pf24bit; if (FileExt == ".BMP") { // 如果是 .BMP 檔的話 Bitmap->LoadFromFile(FileName); } else if (FileExt == ".GIF") { // 如果是 .GIF 檔的話 TGIFGraphic *Gif = new TGIFGraphic(); // 透過 TGIFGraphic 來讀取 Gif->LoadFromFile(FileName); Bitmap->Assign(Gif); delete Gif; Gif = NULL; } else if (FileExt == ".JPG" || FileExt == ".JPEG") { // 如果是 .JPG 或 .JPEG 檔的話 TJPEGImage *JPEG = new TJPEGImage(); // 透過 TJPEGImage 來讀取 JPEG->Performance = jpBestSpeed; JPEG->Scale = jsEighth; JPEG->Scale = jsFullSize; JPEG->LoadFromFile(FileName); Bitmap->Assign(JPEG); delete JPEG; JPEG = NULL; } Graphics::TBitmap *DestBmp = new Graphics::TBitmap(); Bitmap->PixelFormat = pf24bit; DestBmp->Width = ThumbWidth; DestBmp->Height = ThumbHeight; // 以下三是將 DestBmp 填滿指定的底色 DestBmp->Canvas->CopyMode = cmSrcCopy; DestBmp->Canvas->Brush->Color = bkColor; DestBmp->Canvas->FillRect(Rect(0, 0, ThumbWidth, ThumbHeight)); int w = Bitmap->Width; int h = Bitmap->Height; int top; int left; // 如果讀入圖檔的尺寸超出縮圖的指定尺寸,就進行縮小比例的運算 if (Bitmap->Width > ThumbWidth || Bitmap->Height > ThumbHeight) { top = 0; left = 0; float f = (float)h / w; // 取得高度與寬度的比例 w = ThumbWidth; h = f * w; if (h > ThumbHeight) { // 如果計算出來的高度高過縮圖框的高度 h = ThumbHeight; w = h/f; left = (ThumbWidth-w) / 2; } else { top = (ThumbHeight-h) / 2; } SetStretchBltMode(DestBmp->Canvas->Handle, HALFTONE); // 大圖需縮小時作此設定會比較美觀 } else { // 如果讀入圖檔的尺寸小於縮圖的指定尺寸,就計算出居中顯示的位置 left = (ThumbWidth-w) / 2; top = (ThumbHeight-h) / 2; } // 將讀入的圖檔按照縮圖尺寸繪製到已經填滿底色的 Bitmap 物件上 DestBmp->Canvas->CopyRect(Rect(left, top, left w, top h), Bitmap->Canvas, Rect(0,0, Bitmap->Width, Bitmap->Height)); Item->ImageIndex = ImageList3->Add(DestBmp, NULL); // 將縮圖存入 ImageList delete DestBmp; DestBmp = NULL; delete Bitmap; Bitmap = NULL; } } done = FindNext(Sr); // 找尋目錄中的下一個檔案 } FindClose(Sr); ListView3->Items->EndUpdate(); Screen->Cursor = crDefault;以上程式您可以視需要將它放置到您的程式中適當的位置,或者將它寫成自定函式,以便在程式中重覆使用。 7 天天敲鍵盤 v 時時按滑鼠 8 |
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
frankh 您好: 以下是您的部份程式碼:
void __fastcall TForm1::FormCreate(TObject *Sender) { Screen->Cursor = crHourGlass; //TColor bkColor = clSilver; // 縮圖的底色 (圖檔尺寸小於縮圖框尺寸時才會顯示出來) AnsiString GoDir = "C:\\Documents and Settings\Administrator\桌面\testify"; // 要處理縮圖的目錄位置 chdir(GoDir.c_str()); // 切換到指定目錄去 }您的 FormCreate 事件中並未放置我的其它程式碼,您也沒有將那些程式碼寫成副程式或函式來呼叫,當然不會有動作。 請您將我提供的全部敘述都放到 FormCreate 事件中,然後設定好 GoDir 變數的內容,再重新編譯、執行看看結果如何? 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/02 17:56:39 |
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
frankh 您好: 請比照下列方式做設定,然後試試看:
// 先將 ListView1 的 DragMode 設為 dmAutomatic void __fastcall TForm1::Image1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { if (Source == ListView1) { Accept = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1DragDrop(TObject *Sender, TObject *Source, int X, int Y) { if (Source == ListView1) { Image1->Picture->Bitmap = LoadImage(ListView1->Selected->Caption); } }7 天天敲鍵盤 v 時時按滑鼠 8 |
frankh
一般會員 發表:25 回覆:36 積分:12 註冊:2005-05-04 發送簡訊給我 |
RedSnow您好:
我沒辦法run....我都有宣告了..請您指導一下...
Build [C Error] Unit1.cpp(160): E2034 Cannot convert 'const AnsiString' to 'void *' [C Error] Unit1.cpp(160): E2340 Type mismatch in parameter 1 (wanted 'void *', got 'AnsiString') [C Error] Unit1.cpp(160): E2193 Too few parameters in call to '__stdcall LoadImageA(void *,const char *,unsigned int,int,int,unsigned int)' [C Error] Unit1.cpp(160): E2034 Cannot convert 'void *' to 'TBitmap *' |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |