С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/78: Рейтинг темы: голосов - 78, средняя оценка - 4.54
Alexei1977
1 / 1 / 0
Регистрация: 05.03.2010
Сообщений: 24
1

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"

19.11.2010, 10:05. Просмотров 14601. Ответов 2
Метки нет (Все метки)

Доброе время суток,
как переделать
C++
1
int Key= Application->MessageBox(L"Text", L"Caption", MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
чтоб место "YES" и "NO" показывало "ДА" и "НЕТ"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 10:05
Ответы с готовыми решениями:

Открыть папку "мой компьютер", "панель управления", "program files"
Нужно открыть папку "мой компьютер", "панель управления", "program files"

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д....

Ошибки: "Failed to allocate SAVEmem" и ""bcc32" exited with code 1."
Помогите пожалуйста с этими ошибками. Такое не только у меня, полазил по разным...

Найти частоту встречаемости следующих друг за другом символов "А", "В"и "С".
В заданном тексте найти частоту встречаемости следующих друг за другом...

Как указать функцию: "СreateDesktop (или CreateDesktopEx)" - чтобы рабочий стол создался не в "Полноэкранном режиме", а в билдерской форме (TForm)?
Привет всем... 1 вопрос: Как указать функцию: "СreateDesktop (или...

2
Sasha
4924 / 2388 / 530
Регистрация: 05.06.2008
Сообщений: 7,482
Записей в блоге: 3
19.11.2010, 10:22 2
C++
1
2
3
4
5
6
7
8
9
AnsiString ds = "Вы деиствительно хотите удалить выбранную строку? \n\n" + IntToStr(ADOQuery1->FieldByName("Invent_Number")->AsInteger)+" - "+ADOQuery1->FieldByName("Number_in_Lan")->AsString+" - "+ADOQuery1->FieldByName("Department")->AsString+" - "+ADOQuery1->FieldByName("Processor")->AsString+" - "+ADOQuery1->FieldByName("Memory")->AsString+" - "+ADOQuery1->FieldByName("HDD")->AsString+" - "+ADOQuery1->FieldByName("Room")->AsString;
     if (Application->MessageBox(ds.c_str(),"Подтверждение удаления строки из базы данных",MB_YESNO +MB_TOPMOST+ MB_ICONQUESTION)!=IDYES)
     {
         Abort();
     }
     else
{
 
}
1
VtaMC
Просто Веталь
160 / 100 / 22
Регистрация: 11.05.2009
Сообщений: 628
19.11.2010, 20:59 3
Кнопки MessageBox`а показывают надписи на том языке, который установлен в системе по умолчанию. Как вариант - сделать свой.

Вот нашел пример кода на стороннем форуме, где меняются надписи на кнопках. Делается это с помощью установки хука на окно сообщения. В этом случае надписи просто меняются при появлении окна.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//
//  MsgBoxEx - how to customize a standard message box
//  Written by J Brown 2002
//  Freeware
//
 
#include <windows.h>
#include <tchar.h>
 
TCHAR szContents[] = _T("Windows will now wipe your harddisk!");
TCHAR szTitle[]    = _T("Hello");
 
HHOOK hMsgBoxHook;
 
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    TCHAR ach[40];
    HWND hwnd;
    HWND hwndButton;
 
    if(nCode < 0)
        return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
 
    switch(nCode)
    {
    case HCBT_ACTIVATE:
 
        // Get handle to the message box!
        hwnd = (HWND)wParam;
 
        SetWindowText(hwnd, _T("Message from Bill"));
 
        hwndButton = GetDlgItem(hwnd, IDOK);
        SetWindowText(hwndButton, _T("Thankyou"));
        
        return 0;
 
    }
 
    return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}
 
 
int MsgBoxEx(HWND hwnd, TCHAR *szText, TCHAR *szCaption, UINT uType)
{
    int retval;
 
    // Install a window hook, so we can intercept the message-box
    // creation, and customize it
    hMsgBoxHook = SetWindowsHookEx(
        WH_CBT, 
        CBTProc, 
        NULL, 
        GetCurrentThreadId()            // Only install for THIS thread!!!
        );
 
    // Display a standard message box
    retval = MessageBox(hwnd, szText, szCaption, uType);
 
    // remove the window hook
    UnhookWindowsHookEx(hMsgBoxHook);
 
    return retval;
}
 
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
{
    // Just display a standard message box.
    // It doesn't matter that we have no parent window or a
    // message-loop, because MessageBox has it's own message loop.
 
    MsgBoxEx(NULL, szContents, szTitle, MB_OK | MB_ICONSTOP);
        
    return 0;
}

Вот для C++ Builder пример реализации окна сообщения, со своими названиями на кнопках:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "message.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm23 *Form23;
//---------------------------------------------------------------------------
__fastcall TForm23::TForm23(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
//контейнер для своих названий кнопок
class MessageButtons
{
    public:
        String OK,
                YES,
                NO,
                CANCEL,
                ABORT,
                RETRY;
};
 
MessageButtons buttons;
HHOOK hook;
 
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
        HWND hwnd;
        HWND hwndButton;
 
        if(nCode < 0)
                return CallNextHookEx(hook, nCode, wParam, lParam);
 
        switch(nCode)
        {
            case HCBT_ACTIVATE:
                hwnd = (HWND)wParam;
                //присваимаем текст, кнопке
                hwndButton = GetDlgItem(hwnd, IDOK);
                SetWindowText(hwndButton, buttons.OK.c_str());
 
                hwndButton = GetDlgItem(hwnd, IDCANCEL);
                SetWindowText(hwndButton, buttons.CANCEL.c_str());
 
                hwndButton = GetDlgItem(hwnd, IDCANCEL);
                SetWindowText(hwndButton, buttons.NO.c_str());
 
                hwndButton = GetDlgItem(hwnd, IDYES);
                SetWindowText(hwndButton, buttons.YES.c_str());
 
                hwndButton = GetDlgItem(hwnd, IDABORT);
                SetWindowText(hwndButton, buttons.ABORT.c_str());
 
                hwndButton = GetDlgItem(hwnd, IDRETRY);
                SetWindowText(hwndButton, buttons.RETRY.c_str());
                break;
        }
 
        return CallNextHookEx(hook, nCode, wParam, lParam);
}
 
//перегружаем функцию MessageBox
int MessageBox(String message, String title, UINT type)
{
    int messageRes;
    hook = SetWindowsHookEx(
                WH_CBT,
                (HOOKPROC)HookProc,
                NULL,
                GetCurrentThreadId()
                );
    MessageBox(NULL, message.c_str(), title.c_str(), type);
    UnhookWindowsHookEx(hook);
    return messageRes;
}
 
void __fastcall TForm23::Button1Click(TObject *Sender)
{
    //задаём название кнопок
    buttons.OK = "Хорошо!";
    buttons.NO = "Нет, не надо!";
    buttons.CANCEL = "Да ну на фиг!";
    buttons.YES = "Ага!";
    buttons.ABORT = "Прервать";
    buttons.RETRY = "Повторить ещё разок!";
 
    //вызываем нашу функцию MessageBox
    MessageBox("Моё сообщение", "Сообщение", MB_OKCANCEL|MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
9
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 20:59

Часы в TTime вместо "00" принимает "12"
Подскажите пожалуйста как работать с TTime TTime sessionTime; sessionTime...

Встречается ли среди k первых цифр дробной части вещественного числа "a" заданная цифра "b"?
Определить, есть ли среди k-первых цифр дробной части вещественного числа a...

"E2090: Qualifier 'Date0' is not a class or namespace name" и "E2040: Declaration terminated incorrectly"
Подскажите пожалуйста,в чем ошибка?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru