如何關閉form,因error跳出的message,而不關閉主form |
尚未結案
|
navy1018
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-06 發送簡訊給我 |
因為用FindWindow,找form的Title可以關閉message,但同時也會將主程式關閉 如何可以,只關閉跳出的message(與Form的名稱相同),而不關閉Form http://delphi.ktop.com.tw/topic.php?topic_id=24995
http://www.delphifaq.com/fq/q2111.shtml
http://delphi.ktop.com.tw/topic.php?topic_id=22255
http://delphi.ktop.com.tw/topic.php?topic_id=24619 謝謝
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
navy1018 您好 : 我想您已經找到解答了,簡單的做法是可以改變 Message Form 的 Title..
這樣便會與 Main Form 有所區別,另外的做法是,用迴圈找出所有相同 Title 的視窗的 HWND ,然後剔除掉 Main Form HWND,再關掉 Message Form... 要改變 Message Form Title ,改 ShowMessage 換成 MessageBox ..
或者自己客制化一個 Message Form ... ----
我只會兩件事,這也不會,那也不會
----
眼見不一定為真
|
navy1018
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-06 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 不同的Title可以做到自動關訊息,可是若是程式因錯誤而產生的title與project的一樣,有什方法可以只關這訊息,而不是主程式Ex : (暴力法) 利用迴圈 與 FindWindow 可以找出所有特定 Title 的視窗,然後排除 MainForm .. var hWND:THandle; repeat hWND := FindWindow(nil, ATitle); if hWND <> MainForm.Handle then // Do Close the Message Form util hWND <> 0; 這樣主視窗就不會被關閉了.... 有個邏輯提出來討論一下,既然有預測到錯誤發生的狀況... 為何不用 try .. except 將 Exception 攔截後處理?? ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
navy1018
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-06 發送簡訊給我 |
引言:引言: 不同的Title可以做到自動關訊息,可是若是程式因錯誤而產生的title與project的一樣,有什方法可以只關這訊息,而不是主程式Ex : (暴力法) 利用迴圈 與 FindWindow 可以找出所有特定 Title 的視窗,然後排除 MainForm .. var hWND:THandle; repeat hWND := FindWindow(nil, ATitle); if hWND <> MainForm.Handle then // Do Close the Message Form util hWND <> 0; 這樣主視窗就不會被關閉了.... 有個邏輯提出來討論一下,既然有預測到錯誤發生的狀況... 為何不用 try .. except 將 Exception 攔截後處理?? 同一個程式中,我試過了可以,但是如何才能由 A form 關閉 B form的錯誤 怎樣宣告 B 的main form 的名稱。 而不用try except的原因,是因為是用別人的元件。 而是元件所產生的錯,但程式還是可以run。 thx! ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 同一個程式中,我試過了可以,但是如何才能由 A form 關閉 B form的錯誤 怎樣宣告 B 的main form 的名稱。 而不用try except的原因,是因為是用別人的元件。 而是元件所產生的錯,但程式還是可以run。 thx!那應該是別人產生的 Message Box 吧?? 如果是 raise Exception 應該攔截得到,如果 Form A, Form B 都是您寫的 (只是加入元件使用)... 那您可以 Form B 寫一個上一封那樣的邏輯將其寫成 procedure (您已經試驗成功的),然後再加上接收 WM_USER 一個自訂 message (改寫 WndPoc 接收 WM_USER),最後 Form A 寫一個 SendMessage 送 WM_USER 給 Form B,讓 Form B 收到 WM_USER 後執行上面 procedure 便可達到需求了... 兩 process 間通訊,請參考這篇討論... http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45186 另外,也可以利用不同 process 通訊的方式達到上面的模型... 原理就是,通知 Form B 自己結束自己的 Error Message.. 假設,最壞的情況, Form B 不是你自己寫的 ... 那在 Form A 開始執行時, Form B 還沒有產生錯誤的時候,利用 FindWindow 先將 Form B 的 HWND 儲存起來,然後這樣再套用上一封的邏輯,這樣便可以只消除您的目標視窗.... 頗暴力的方法,不過應該有效,參考看看... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 發表人 - |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |