2017-09-14 9 views
0

메시지 상자의 YESNO 단추의 텍스트를 변경하려고합니다. RAD Studio XE에서 TMsgDlgButtons "Yes"와 "No"버튼의 텍스트를 변경하는 방법은 무엇입니까?

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/en-us/library/windows/)를 호출합니다. desktop/bb760544.aspx), 텍스트는 사용자의 로켈을 기반으로하는 OS 자체에서 가져옵니다. 테마가 비활성화되거나'UseLatestCommonDialogs = false' 인 경우에는 CreateMessageDialog()를 대신 호출하여 커스텀 VCL'TForm'을 생성합니다. 'CreateMessageDialog()'를 직접 호출하고 원하는대로'TForm'을 사용자 정의 할 수 있습니다. –

+0

XE에서'AnsiString'을 사용하는 이유는 무엇입니까? 'CModalWndManager :: ShowMessageBox()'가 내부적으로 VCL 대화 상자를 사용하고 있다면 특히'UnicodeString'을 사용해야합니다. –

+0

@RemyLebeau 대단히 감사합니다. 답변 ... 정말 appriciate ... 나는 필요에 따라 CreateMessageDialog 및 TForm 속성을 수정했습니다. 그리고 그것은 작동합니다. Thanx from India. –

답변

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'를 사용하는 것은 불필요하다는 것을 알고 있습니다. 예 버튼을 요청하면, 하나를 얻고, FindComponent()는 NULL을 반환하지 않습니다. 'TButton'이 사용되었다는 것을 알고 있기 때문에 대신'static_cast'를 사용할 수 있으며 NULL 검사를 생략 할 수 있습니다. 다른 버튼들과 동일하다. –