2017-09-14 66 views
0

我想在消息框中更改YESNO按鈕的文本。如何在RAD Studio XE中更改TMsgDlgButtons文本的「是」和「否」按鈕?

CModalWndManager::ShowMessageBox(AnsiString::LoadStr(IDS_NOT_SUPPORTED).c_str(), mtWarning, TMsgDlgButtons() << mbYes << mbNo, mbOK == mrYes); 

相反的YES,我想"Switch Mode",併爲NO我想"Exit"

RAD Studio XE可以做到這一點嗎?

+0

什麼是'CModalWndManager :: ShowMessageBox()'調用內部實際顯示消息框?如果使用'Dialogs :: MessageDlg()',那麼在啓用了主題的Vista +和'UseLatestCommonDialogs = true'的情況下,它調用['TaskDialogIndirect()'](https://msdn.microsoft.com/zh-cn/library/windows/ desktop/bb760544.aspx),所以文本基於用戶的語言環境來自操作系統本身。如果主題被禁用或者'UseLatestCommonDialogs = false',它會調用'CreateMessageDialog()',而這會創建一個自定義的VCL'TForm'。您可以直接調用'CreateMessageDialog()',然後自定義'TForm'但是您想要 –

+0

爲什麼在XE中使用'AnsiString'?你應該使用'UnicodeString'來代替,特別是如果'CModalWndManager :: ShowMessageBox()'在內部使用VCL對話框。 –

+0

@RemyLebeau非常感謝您的答覆...真正appriciate ...我使用CreateMessageDialog和修改TForm屬性作爲需要..它的工作.. Thanx從印度。 –

回答

1

http://bcbjournal.org/articles/vol4/0003/Making_marvelous_message_dialogs.htm

TForm* Dlg = CreateMessageDialog(
    "Purge Warp Core?", mtConfirmation, 
    TMsgDlgButtons() << mbYes << mbNo); 
    TButton* yb = dynamic_cast<TButton *> 
    (Dlg->FindComponent("Yes")); 
    if (yb) 
    yb->Caption = "Affirmative"; 
    TButton* nb = dynamic_cast<TButton *> 
    (Dlg->FindComponent("No")); 
    if (nb) 
    nb->Caption = "Negative"; 
    int Rslt = Dlg->ShowModal(); 
    switch (Rslt) { 
    case mrYes: ;// do "Yes" stuff 
    case mrNo: ;// do "No" stuff 
+0

我知道文章顯示了這一點,但使用'dynamic_cast'是不必要的。如果你要求一個Yes按鈕,你會得到一個,而FindComponent()不會返回NULL。既然你知道使用'TButton',你可以使用'static_cast'來代替NULL檢查。與其他按鈕相同 –

相關問題