請問CreateMessageDialog如何接收回傳值? |
答題得分者是:懷舊的人
|
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
由前面的討論已經知道如何改變MessageDialog的按鈕
可是 CreateMessageDialog 的回傳型態為 TForm*
不同於一般的Diglogs。
如 MessageBox 回傳為 int (IDOK)
或其他的 Diglogs回傳mrOK ...
如以下的程式碼,如何知道哪個按鈕被按呢?
請各位大大不吝指教
TMsgDlgButtons mbFour; mbFour << mbYes << mbNo ; TForm* p=CreateMessageDialog("Message",mtWarning,mbFour); ((TButton*)p->FindComponent("Yes"))->Caption="確定";//改變Yes的Caption為確定 p->ShowModal(); delete p; |
懷舊的人
高階會員 發表:28 回覆:152 積分:141 註冊:2003-01-08 發送簡訊給我 |
這是我給您的建議: 1. 請參考 HELP 有關 CreateMessageDialog 的說明。 2. 請參考以下 DELPHI 的範例。(很抱歉 C++ 不熟)
procedure TForm1.Button1Click(Sender: TObject); const mbFour = [mbYes, mbNo, mbOK, mbCancel]; var F: TForm; begin F := CreateMessageDialog('要重新製作嗎?',mtWarning,mbFour); with F do try TButton(FindComponent('Yes')).Caption := '是'; TButton(FindComponent('No')).Caption := '不'; TButton(FindComponent('OK')).Caption := '好的'; TButton(FindComponent('Cancel')).Caption := '取消'; ShowModal; case ModalResult of mrYes: ShowMessage('Press Yes !'); mrNo: ShowMessage('Press No !'); mrOK: ShowMessage('Press OK !'); mrCancel: ShowMessage('Press Cancel !'); end; finally Free; end; end;3. 拜託前輩翻譯成 C 的語法。 4. 如果您是因為第一項而解決問題,請給分為從缺;第二項,則隨您指定;第三項,請給翻譯者。 |
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
TMsgDlgButtons mbFour; mbFour << mbYes << mbNo << mbOK << mbCancel; TForm* p=CreateMessageDialog("n«·s»s§@¶Ü?",mtWarning,mbFour); ((TButton*)p->FindComponent("Yes"))->Caption="確定"; switch(p->ShowModal()) { case mrYes: Button1->Caption="Yes"; break; case mrNo: Button1->Caption="No"; break; case mrOk: Button1->Caption="OK"; break; case mrCancel: Button1->Caption="Cancel"; break; } delete p;不好意思,分數又要給您啦~~ 上一題有點對不起justdo大大 anyway,感謝大大精彩解答 發表人 - cliffpen 於 2005/10/11 22:43:26 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
cliffpen 您好: 以下是我寫的自定函式,我盡量加註了說明,希望您能看得懂:
// 自定對話框 int __fastcall MyMessageBox(char *Text, char *Caption, TMsgDlgButtons Flags) { // 比對英文按鈕之用 AnsiString btnEngCaption[11] = {"Yes", "No", "OK", "Cancel", "Abort", "Retry", "Ignore", "All", "NoToAll", "YesToAll", "Help"}; // 設定按鈕為中文名稱之用 AnsiString btnChtCaption[11] = {"是(&Y)", "否(&N)", "確定(&O)", "取消(&C)", "放棄(&T)", "重試(&R)", "忽略(&I)", "全部(&A)", "全部為 '否'(&L)", "全部為 '是'(&E)", "說明(&H)"}; TForm *MsgDlg = CreateMessageDialog(Text, mtWarning, Flags); MsgDlg->Caption = Caption; TComponent * TheComponent; for (int i=0; i<11; i ) { // 找尋原有的英文按鈕 TheComponent = MsgDlg->FindComponent(btnEngCaption[i]); if (TheComponent) { // 如果找到了 ((TButton*)TheComponent)->Caption = btnChtCaption[i]; // 將按鈕字樣改設為對應的中文字樣 } } int rc = MsgDlg->ShowModal(); // 顯示對話框,對話框結束後會傳回被點選的按鈕值 delete MsgDlg; MsgDlg = NULL; return rc; } // 使用範例: void __fastcall TForm1::Button1Click(TObject *Sender) { // 顯示對話框被點選項目所對應的中文字樣 AnsiString cMsg[11] = {"無", "確定", "取消", "放棄", "重試", "忽略", "是", "否", "全部", "全部為 '否'", "全部為 '是'"}; int rc = MyMessageBox("使用四個選項的自定對話框?", "自定對話框", TMsgDlgButtons() << mbYes << mbNo << mbOK << mbCancel); ShowMessage("點選了 [" cMsg[rc] "] 鈕"); }7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/11 22:32:34 |
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |