要如何在程式中擷取這樣的錯誤訊息(問題中有圖示)? |
答題得分者是:ken0127
|
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
|
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
圖片就是我目前從讀卡機的SD卡插槽讀取出來的影像
並把他秀在image元件 我是用下面的程式碼寫出來的: [code cpp] #include #include #include #include #include __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Memo1->Clear(); Img_Count=0; } //--------------------------------------------------------------------------- void __fastcall TForm1::DirFiles(AnsiString RootDir, bool chkSubDir, bool incPath) { //TODO: Add your source code here chdir(RootDir.c_str()); // 切換到指定目錄去 TSearchRec Sr; // 設Sr為存放檔案資訊的結構變數 AnsiString FileName; // 設定檔案名稱之用的暫存變數 TImage *Img; int done = FindFirst("*.*", faDirectory | faAnyFile, Sr); while (done == 0) { if (!(Sr.Attr & faDirectory)) // 如果是檔案 { if (incPath) // 如果檔名要包含路徑資料在內 { char curdir[MAXPATH 1]; GetCurrentDirectory(MAXPATH, curdir); // 取得現行目錄名稱 FileName = AnsiString(curdir) "\\" Sr.Name; // 設定含路徑的檔名 } else FileName = Sr.Name; // 設定不含路徑的檔名 Img_Count ; Img = (TImage*)Form1->FindComponent("Image" AnsiString(Img_Count)); if((ExtractFileExt(FileName) == ".jpg") || (ExtractFileExt(FileName) == ".JPG") ) { TJPEGImage *jp = new TJPEGImage; jp->LoadFromFile(FileName); Img->Picture->Bitmap->Assign(jp); delete jp; } else Img->Picture->Bitmap->LoadFromFile(FileName); Application->ProcessMessages(); Memo1->Lines->Add(FileName); // 此處設置您自己要處理的動作 } else if(chkSubDir) // 如果要檢查次目錄內的檔案 { if (Sr.Name != "." && Sr.Name != "..") // 如果不是相對目錄代碼的話 { DirFiles(Sr.Name.c_str(), true, incPath); // 如果是目錄的話就遞迴處理 chdir(String("..").c_str()); // 切換回前一層目錄 } } done = FindNext(Sr); // 找目錄中的下一個檔案 } FindClose(Sr); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { LPTSTR lpBuffer; DWORD dwDeviceCnt; DWORD SecPerCls,BytesPerSec,NumOfFreeCls,TotalNumOfCls; double DiskSpace; dwDeviceCnt = GetLogicalDriveStrings(0, lpBuffer); //讀到字串的大小 if(dwDeviceCnt) { char *buf = new char[dwDeviceCnt]; GetLogicalDriveStrings(dwDeviceCnt, buf); for(DWORD idx=0; idx<(dwDeviceCnt-1); idx) { if(buf[idx]==0) buf[idx] =' '; } AnsiString sDevice=buf; while(!sDevice.IsEmpty()) { sDevice.Delete(1,sDevice.Pos(" ")); vStrDevice.push_back(sDevice.SubString(1,sDevice.Pos(" ")-1)); } int flag=0; TEdit *Edt; AnsiString Dir; for(int idx=0; idx switch(GetDriveType(vStrDevice[idx].c_str())) { case DRIVE_REMOVABLE: flag ; Edt = (TEdit*)Form1->FindComponent("Edit" AnsiString(flag)); Dir = vStrDevice[idx]; //這個就是可移除的裝置,例如:usb的磁碟機,軟碟機等 Edt->Text = Dir; bool CheckSubDirectory = true; // 取得檔案名稱時是否要檢查次目錄內的檔案? bool NameIncludePath = true; // 取得檔案名稱時是否要包含路徑名稱? if(Dir=="D:\\") DirFiles(Dir, CheckSubDirectory, NameIncludePath); break; } } delete buf; } } [/code] 不過我現在的問題是: 如果我去讀取沒有插卡的卡槽時, 就會出現下面這個狀況: 因為我現在是用GetDriveType去取得所有REMOVEABLE TYPE的磁碟, 也不能確定使用者是用CF卡或是SD卡等等, 所以我必須每個REMOVEABLE TYPE的磁碟都去拜訪, 然後把裡面的影像秀出來, 但是就會出現像上圖這樣錯誤, 不知道前輩們有沒有解決的辦法? 拜託了~~~~ |
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
這個問題不知道是不是無解呢? 還是說有另外一種方式, 就是說當我們隨身碟插上去時, Windows不是會跳出一個對話框, 問你是要打開資料夾還是檔案等等, 是不是有這種API可以擷取這個訊息, 這樣子就可以知道使用者是插入那個插槽... 不知道是不是有人可以跟我討論一下, 難道都沒有人有類似的經驗嗎? 我也一直都把我實作的過程以及心得分享給大家 我拿去Win32 API那邊問也被刪掉了 我知道這是屬於週邊設計的範圍 可是這也應該是需要利用Win32 API去解決的問題 所以才想說去那邊問問看... 真的拜託各位前輩幫幫忙! |
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
|
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
Ok, function, GetDiskFreeSpace, can't work.
So I had ever used "try catch" to catch error message, but I don't know why I can't get any message. even if catch(...), no error message can be got. So, I had used the function, SetErrorMode, it finally solved my trouble. Ok, let's cancel this issue. |
ken0127
一般會員 發表:3 回覆:9 積分:7 註冊:2009-09-23 發送簡訊給我 |
小弟其實也不知道要如何顯示像樓主所需要的訊息框
不過今天拜讀過樓主的程式碼,找了一下站上資料後 在下面加入那段程式碼 可擋掉讀入未插卡之磁區 至於訊息框…另一個方法就是在else的地方加上跳出一個form …土法煉鋼一下..... ps:您的image顯示方法好神呀~~~只是好像有圖片數目的限制厚= = [code cpp] case DRIVE_REMOVABLE: if(DirectoryExists(vStrDevice[idx].c_str())) //加入此段 { flag ; Edt = (TEdit*)Form1->FindComponent("Edit" AnsiString(flag)); Dir = vStrDevice[idx]; //這個就是可移除的裝置,例如:usb的磁碟機,軟碟機等 Edt->Text = Dir; bool CheckSubDirectory = true; // 取得檔案名稱時是否要檢查次目錄內的檔案? bool NameIncludePath = true; // 取得檔案名稱時是否要包含路徑名稱? if(Dir=="F:\\") DirFiles(Dir, CheckSubDirectory, NameIncludePath); } break; [/code] |
sunwingman
一般會員 發表:26 回覆:47 積分:14 註冊:2008-05-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |