如何在 RAD Studio XE 中更改 TMsgDlgButtons“是”和“否”按钮的文本?

Posted

技术标签:

【中文标题】如何在 RAD Studio XE 中更改 TMsgDlgButtons“是”和“否”按钮的文本?【英文标题】:How to change the Text of TMsgDlgButtons "Yes" and "No" Buttons in RAD Studio XE? 【发布时间】:2017-09-14 06:20:47 【问题描述】:

我想更改消息框中YESNO 按钮的文本。

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

我想要"Switch Mode",而不是YES,对于NO,我想要"Exit"

是否可以在 RAD Studio XE 中执行此操作?

【问题讨论】:

CModalWndManager::ShowMessageBox() 在内部调用什么来实际显示消息框?如果Dialogs::MessageDlg(),那么在启用主题的Vista+ 和UseLatestCommonDialogs=true 上它调用TaskDialogIndirect(),因此文本来自操作系统本身,基于用户的区域设置。如果主题被禁用或UseLatestCommonDialogs=false,它会调用CreateMessageDialog(),这会创建一个自定义VCL TForm。您可以直接调用CreateMessageDialog(),然后根据需要自定义TForm 为什么在 XE 中使用 AnsiString?您应该改用UnicodeString,尤其是当CModalWndManager::ShowMessageBox() 在内部使用VCL 对话框时。 @RemyLebeau 非常感谢您的回答...非常感谢...我使用了 CreateMessageDialog 并根据需要修改了 TForm 属性...它可以工作...来自印度的谢谢。 【参考方案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

【讨论】:

我知道这篇文章显示了这一点,但使用dynamic_cast 是不必要的。如果你要求一个是按钮,你会得到一个,FindComponent() 不会返回 NULL。由于您知道使用了 TButton,因此您可以改用 static_cast,并省略 NULL 检查。与其他按钮相同 好,但在开关内添加一些break;

以上是关于如何在 RAD Studio XE 中更改 TMsgDlgButtons“是”和“否”按钮的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 RAD Studio XE6 中存储 Android 应用程序数据/设置?

RAD Studio XE5 移动应用程序中的 TCheckBox

delphi XE 和 RAD studio有啥区别

Delphi TADOStoredProc / D6 和 RAD Studio XE2 最近的故障

在 Rad Studio XE 6 中找不到 C++ Builder 项目

如何在 Delphi XE2 中安装 TMS Component Pack 6.0?