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

如何關閉form,因error跳出的message,而不關閉主form

尚未結案
navy1018
一般會員


發表:13
回覆:16
積分:5
註冊:2003-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-19 08:29:47 IP:61.222.xxx.xxx 未訂閱
因為用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-19 09:37:38 IP:203.66.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-19 14:41:52 IP:61.222.xxx.xxx 未訂閱
不同的Title可以做到自動關訊息,可是若是程式因錯誤而產生的title與project的一樣,有什方法可以只關這訊息,而不是主程式
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-19 16:00:38 IP:203.66.xxx.xxx 未訂閱
引言: 不同的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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-19 17:08:28 IP:61.222.xxx.xxx 未訂閱
引言:
引言: 不同的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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-20 09:15:18 IP:203.66.xxx.xxx 未訂閱
引言: 同一個程式中,我試過了可以,但是如何才能由 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 儲存起來,然後這樣再套用上一封的邏輯,這樣便可以只消除您的目標視窗.... 頗暴力的方法,不過應該有效,參考看看... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 發表人 -
系統時間:2024-05-01 12:26:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!