全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3762
推到 Plurk!
推到 Facebook!

請問捕捉 EOleException (使用PowerPoint COM元件)

尚未結案
ericssoneric
一般會員


發表:9
回覆:5
積分:2
註冊:2005-01-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-18 22:42:12 IP:220.134.xxx.xxx 未訂閱
不好意思請問一下, 當我用PowerPoint COM 元件去控制 PowerPoint時 若有不正當的操作 (例如:沒開PowerPoint,卻按下自己程式上『播放投影片』的按鈕) 便會出現 EOleException 我想捕捉它卻怎麼試都試不出來 不管是 catch(...) 或 catch(EOleException &ee) 都沒有用 >< 請問有人有類似的經驗可以分享的嗎 謝謝您
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-21 00:26:59 IP:203.204.xxx.xxx 未訂閱
BCB6在編譯環境下不管你有沒去catch都是會自己抓例外的~將你的bcb關掉再 直接執行你的程式看看有沒有抓到才準~~
ericssoneric
一般會員


發表:9
回覆:5
積分:2
註冊:2005-01-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-21 00:58:01 IP:220.134.xxx.xxx 未訂閱
引言: BCB6在編譯環境下不管你有沒去catch都是會自己抓例外的~將你的bcb關掉再 直接執行你的程式看看有沒有抓到才準~~
萬分感謝,大致上算是解決了 謝謝您,謝謝
ericssoneric
一般會員


發表:9
回覆:5
積分:2
註冊:2005-01-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-21 17:07:05 IP:140.123.xxx.xxx 未訂閱
其實還有個問題 就是在我所catch到的EOleException}之前 會有一個HRCHECK的錯誤訊息 <=有辦法把它弄掉嗎? 如圖 以下的圖是catch EOleException 後自己寫的ShowMessage PS:我是直接拖曳BCB提供的VCL元件(PowerPointApplication) 以下是 播放投影片 的程式碼 void __fastcall TForm1::N6Click(TObject *Sender) { PowerPointApplication1->ActivePresentation->SlideShowSettings->Run(); } 萬分感謝
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-23 23:48:32 IP:203.204.xxx.xxx 未訂閱
HRCHECK訊息是什麼從字面上我看不出來~ 可能你在型態的格式上有問題吧~ 參考我之前的回覆~程式片段~看是否有缺什麼程序~或查一下 href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61763">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61763
ericssoneric
一般會員


發表:9
回覆:5
積分:2
註冊:2005-01-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-24 01:32:39 IP:220.134.xxx.xxx 未訂閱
恩,不好意思,是我表達的不好 假設目前PowerPoint應用程式沒有開啟,但是我卻按下自己寫的程式(例如:有一個按鈕『下一頁』)便會發出此HRESULT錯誤訊息 這便是我所指的不正當的操作 (總得避免使用者的不正當操作程序)    以下附一下我的一些code (以下的程式我都有用try 與 catch(EOleException &ee))
//開啟舊檔    void __fastcall TForm1::N2Click(TObject *Sender)
{
   Variant PathName;       if(OpenDialog1->Execute()){
     //記錄開檔位置
     PathName=OpenDialog1->FileName;
     //將powerpoint的應用程式設為可見
     PowerPointApplication1->set_Visible(msoTrue);
     PowerPointApplication1->Presentations->Open(PathName,msoFalse,msoFalse,msoTrue);
      }
}    //儲存檔案
void __fastcall TForm1::N11Click(TObject *Sender)
{
   Variant PathName;       if(SaveDialog1->Execute()){
      PathName = SaveDialog1->FileName;
      //另存成投影片格式(.ppt)
      if(SaveDialog1->FilterIndex ==1 )
         PowerPointApplication1->ActivePresentation->SaveAs( PathName, ppSaveAsPresentation, msoTrue );
      //另存成JPEG檔案交換格式(.jpg)
      else if(SaveDialog1->FilterIndex ==2)
         PowerPointApplication1->ActivePresentation->SaveAs( PathName, ppSaveAsJPG, msoTrue);
   }
}    //網頁預覽
void __fastcall TForm1::Web1Click(TObject *Sender)
{
   PowerPointApplication1->ActivePresentation->WebPagePreview();        
}    //簽字筆
void __fastcall TForm1::P1Click(TObject *Sender)
{
    PowerPointApplication1->ActivePresentation->SlideShowWindow->View->PointerType = ppSlideShowPointerPen;     
}
對了,PowerPointApplication元件好像只能用簽字筆 ,沒有螢光筆或是鋼珠筆
即使我用OLE也沒有    //擦掉所有筆跡
void __fastcall TForm1::N34Click(TObject *Sender)
{
    PowerPointApplication1->ActivePresentation->SlideShowWindow->View->EraseDrawing();
}
這個method再Office2003有bug , 他會修飾筆跡,而不是擦掉所有筆跡    
發表人 - ericssoneric 於 2005/03/24 01:38:52 發表人 - ericssoneric 於 2005/03/24 01:40:11
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-24 02:19:39 IP:203.204.xxx.xxx 未訂閱
引言: 假設目前PowerPoint應用程式沒有開啟,但是我卻按下自己寫的程式(例如:有一個按鈕『下一頁』)便會發出此HRESULT錯誤訊息 這便是我所指的不正當的操作 (總得避免使用者的不正當操作程序)
我的看法是: 在你所謂的應用程式沒有開啟之下你要做的保護應該是讓按鈕『下一頁』失效 Enabled=false或給於使用者訊息(ShowMessage)說明該動作可行的條件而不是 交由vcl元件給的這個"?"訊息~此非錯誤訊息,而是元件告知你動作有問題,你要讓 他失效~除非你去更改該元件code改由他來判斷錯誤的操作~事實上面的訊息看 起來就是他給的無法執行該功能的判斷訊息~由自己的程式判斷也簡單多了~給的 bool值去判斷或"你的資料開啟"之下再將按鈕enabled打開~以上看法或許有 不正確還望指教~~~^^
ericssoneric
一般會員


發表:9
回覆:5
積分:2
註冊:2005-01-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-24 08:26:51 IP:220.134.xxx.xxx 未訂閱
感謝您的寶貴意見 我所指的不正當操作其實不單單只有PowerPoint未開啟的狀態 像投影片播放模式的時候,若使用者按到任何有關於編輯模式的功能皆會出現錯誤訊息 所以程式一大,if-else的判斷要何其多,這就是為什麼要try-catch的原因吧!? 但是若是用BCB所提供的PowerPointApplication元件 即使我有try{}catch(EOleException &xx){} 在程式catch到之前皆會先出現HRESULT的訊息 但若是用OLE的話便不會出現HRESULT,而是直接捕捉到錯誤訊息 (OLE內是用 catch(EOleSysException &se)) 但用OLE很麻煩而且我不熟>< 所以才想說可否處理掉HRESULT的問題, 謝謝您
BIMEGiGio
一般會員


發表:3
回覆:6
積分:6
註冊:2004-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-02-05 10:58:01 IP:211.72.xxx.xxx 訂閱
最近也碰到了這個HRCHECK的問題 我看了一下 BCB6下面的  utilcls.h 中的檔案
要把HRESULT拿掉的話需要:

[code cpp]
#if !defined(PROMPT_ON_HRCHECK_FAILURE)
int i = IDYES;
#else
int i = DebugHlpr_PROMPT(_T("HRCHECK: "), szMsg);
[/code]

只要上方的條件成立,就會自動回傳IDYES就不會出現HRCHECK的畫面,
如果說是要直接修改該.h檔也是可以
但是我覺得還是不要修改比較好
但是我ㄧ直沒辦法將上方的條件成立
請問各位先進是否是要在BCB裡面的設定要做?
我在我的Unit1.cpp的最前面有加上
[code cpp]
#define NO_PROMPT_ON_HRCHECK_FAILURE 1
#define PROMPT_ON_HRCHECK_FAILURE 0
[/code]
但是還是無法使
#if !defined(PROMPT_ON_HRCHECK_FAILURE)
int i = IDYES;
成立。
特來此請教。謝謝。


===================引 用 ericssoneric 文 章===================
感謝您的寶貴意見我所指的不正當操作其實不單單只有PowerPoint未開啟的狀態像投影片播放模式的時候,若使用者按到任何有關於編輯模式的功能皆會出現錯誤訊息所以程式一大,if-else的判斷要何其多,這就是為什麼要try-catch的原因吧!? 但是若是用BCB所提供的PowerPointApplication元件即使我有try{}catch(EOleException &xx){} 在程式catch到之前皆會先出現HRESULT的訊息 但若是用OLE的話便不會出現HRESULT,而是直接捕捉到錯誤訊息 (OLE內是用 catch(EOleSysException &se)) 但用OLE很麻煩而且我不熟>< 所以才想說可否處理掉HRESULT的問題, 謝謝您
編輯記錄
BIMEGiGio 重新編輯於 2008-02-05 10:58:33, 註解 無‧
系統時間:2024-04-25 20:13:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!