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

請問CreateMessageDialog如何接收回傳值?

答題得分者是:懷舊的人
cliffpen
一般會員


發表:35
回覆:18
積分:15
註冊:2005-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-11 21:08:40 IP:220.130.xxx.xxx 未訂閱
由前面的討論已經知道如何改變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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-11 21:54:22 IP:211.78.xxx.xxx 未訂閱
這是我給您的建議:    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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-11 22:23:55 IP:218.168.xxx.xxx 未訂閱
 
   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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 22:30:28 IP:59.115.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-11 22:42:08 IP:218.168.xxx.xxx 未訂閱
感謝RedSnow又是一個超精采的解答 讓我對 CreateMessageDialog 的了解又深入了一層
系統時間:2024-05-03 16:41:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!