如何在 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 【问题描述】:我想更改消息框中YES
和NO
按钮的文本。
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 TADOStoredProc / D6 和 RAD Studio XE2 最近的故障