2017-09-14 36 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检查。与其他按钮相同 –

相关问题