關於 MessageBox 的問題 |
尚未結案
|
Jack222
一般會員 ![]() ![]() 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
小弟我想顯示一個沒有 Parent 的 MessageBox, 如 MessageBox( NULL, "Content", "Caption", MB_OK), 但若是想把 "OK" 鈕換成 "Cancel" 鈕, 請問可以做的到嗎? 我也試過用 MessageDlg("Content", mtInformation, TMsgDlgButtons() << mbCancel, 0), 但它還是隸屬於 Application, 而不是獨立的; 或者是另外設計一個 Dialog, 但使其自己 Run 起來, 而不是呼叫 ShowModal() 後, 一定要做出回應, Application 才會繼續 Run 下去, 這該如何做到呢? Thanks ~
|
wyndog
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
pika2005
初階會員 ![]() ![]() 發表:27 回覆:48 積分:25 註冊:2005-02-17 發送簡訊給我 |
引言: 小弟我想顯示一個沒有 Parent 的 MessageBox, 如 MessageBox( NULL, "Content", "Caption", MB_OK), 但若是想把 "OK" 鈕換成 "Cancel" 鈕, 請問可以做的到嗎? 我也試過用 MessageDlg("Content", mtInformation, TMsgDlgButtons() << mbCancel, 0), 但它還是隸屬於 Application, 而不是獨立的; 或者是另外設計一個 Dialog, 但使其自己 Run 起來, 而不是呼叫 ShowModal() 後, 一定要做出回應, Application 才會繼續 Run 下去, 這該如何做到呢? Thanks ~Jack222您好,按下Button會出現這訊息..不知道這個行不行.. TForm *f1; TButton *b1; TLabel *l1; void __fastcall MyShowmessage(const String msg,int fontsize) { f1 = new TForm(Form1); b1 = new TButton(f1); l1 = new TLabel(f1); l1->Font->Size = fontsize; l1->Caption = msg; l1->Top = 20; l1->Font->Color = clGreen; l1->Left = 20; l1->Parent = f1; l1->Width=300; f1->Width = 300; f1->Height = 150; f1->Top = Screen->Height / 2 - f1->Height / 2; f1->Left = Screen->Width / 2 - f1->Width / 2; f1->BorderStyle = bsDialog; f1->BorderIcons<發表人 - pika2005 於 2005/03/25 02:49:28 |
Jack222
一般會員 ![]() ![]() 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
感謝指教, 發問之前小弟也有查到 28515 這一篇. 我想問題的癥結是 MessageBox or Dialog 要能真正與 Application 分開 Run, 也就是當 MessageBox or Dialog 秀出來的時候, 在工作列上, 應該會看到兩個應用程式(或最小化的圖示). 我目前的做法是, Create a Thread 來呼叫 MessageBox(NULL, ...), 當 User 按 "Cancel" 鈕時, 透過改變一個 Global Variable, 可停止 Application 正在進行的動作, 但無奈的是 MessageBox 不支援只放一個 "Cancel" button, 現在多了一顆 "OK" button, 真的是有點奇怪, 所以又試了 MessageDlg 和自己做 Dialog 再 ShowModal(), 結果也是會"黏"在 Application 上, 若是用 Show() 的話, 其與 ShowModal() 的主要差別在於不暫停 Application 和等待 User 的回應, 但它還是會等 Application Run 完, 才能接受 User 的回應, 如此一來, 便無法達成可讓 User 臨時中止的功能.
|
wyndog
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
改成這樣子做呢? 把 Application.Handle 給那個 MessageBox
然後,你按下 [Cancel] 的時候
MessageBox 就 PostMessage 給 Application.Handle Application 這邊呢,只要在 Form 上放一個 ApplicationEvents
就可以在 OnMessage 事件裡,接到那個 Message
就可以在那個事件裡,做你想做的事 如果是要打斷你正要做的事情的話
在做事的那段程式碼裡,最好有定期去檢查旗標或者是類似中止條件的動作
|
Jack222
一般會員 ![]() ![]() 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
謝謝建議, 大概知道你的意思, 我已經有做出中止的機制, 其動作大致如下: 主程式 Create 一個 Thread 後, 繼續去做許多次相同的事, 每做一次就會去判斷某一變數, 看是否要中止執行, 而這個變數可被 Thread 更改, Thread 起來時, 會 Call if(MessageBox(NULL, ... ,MB_OKCANCEL|MB_DEFBUTTON2) == IDCANCEL), 若成立則更改那個變數, 這是可以 Work 的 (但我不想要 "OK" button), 因為 User 可以不必等主程式跑完就能自由切換到這個 MessageBox 並做出回應 (Click "Cancel" button), 就好像 Modeless 的 Dialog 一樣.
若使用 BCB 提供的 MessageBox routines 或自己做 Dialog, 還是無法模擬出 Win32 API MessageBox 的行為, 因為 User 雖然"看"的到, 但卻"按"不到 (Parent-Child 的關係), 直到主程式 Run 完, 把 CPU Resource 交出來後, User 才可以按 "Cancel" button.
|
wyndog
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
Jack222
一般會員 ![]() ![]() 發表:9 回覆:8 積分:3 註冊:2004-11-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |