Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787

Переменная в MessageBox

20.08.2013, 12:05. Показов 4935. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
            switch (MessageBoxA(Form1->Handle,"Файл с таким именем уже существует "+PageControl1->ActivePage->Caption.c_str(),"Экспорт",MB_YESNO))
                {
                    case mrYes:
                        {
                            SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsXLS), DBGridEh1,PageControl1->ActivePage->Caption+".xls", true);
                            break;
                        }
                    case mrNo:
                        {
                            break;
                        }
                    default:SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsXLS), DBGridEh1,PageControl1->ActivePage->Caption+".xls", true);
                };
Привет, хочу вставить имя главной вкладки
+PageControl1->ActivePage->Caption.c_str() в сообщения, но выдает ошибку
C++
1
2
3
[bcc32 Error] core.cpp(273): E2085 Invalid pointer addition
  Full parser context
    core.cpp(263): parsing: void _fastcall TForm1::Excel1Click(TObject *)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2013, 12:05
Ответы с готовыми решениями:

Как вывести в MessageBox текст "Значение равно=" ,переменная?
На VB это делается так: MessageBox("Значение равно=" + znachenie, "Заголовок окна") В Visual C++ не нашёл аналога, если поставить + то...

Два раза открывается MessageBox.Show после второго вызова MessageBox
Здравствуйте! Подскажите пожалуйста... Мне вот надо было сделать диалоговое окно для ввода данных для бегущей строки. Кроме этого,...

А что находится внутри функции MessageBox или как еще можно создать MessageBox?
Помните сказку о лягушке-царевне? Что необходимо было сделать, чтобы убить Кащея-бессмертного? ― нужно было сперва с кучей...

19
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
20.08.2013, 12:09
возьми в скобки вот так
C++
1
("Файл с таким именем уже существует "+PageControl1->ActivePage->Caption).c_str()
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
20.08.2013, 12:11  [ТС]
тогда ошибка такая:
Code
1
2
3
[bcc32 Error] core.cpp(272): E2034 Cannot convert 'wchar_t *' to 'const char *'
  Full parser context
    core.cpp(263): parsing: void _fastcall TForm1::Excel1Click(TObject *)
Может я неверно вставляю PageControl1->ActivePage->Caption в MessageBox ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.08.2013, 12:38
Откуда вдруг взялось wchar_t *? У тебя же был 6-ой Билдер?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
20.08.2013, 12:40  [ТС]
был, сейчас переписываю под XE4
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.08.2013, 12:42
Значит, не майся дурью с вызовами MessageBoxA, вызывай:
C++
1
2
3
MessageBox(Form1->Handle,
   (L"Файл с таким именем уже существует "+PageControl1->ActivePage->Caption).c_str(),
   L"Экспорт", MB_YESNO)
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
20.08.2013, 12:42
C++
1
MessageBoxA(Handle, AnsiString("Файл  с таким именем уже существует " + PageControl1->ActivePage->Caption).c_str(), "Экспорт", MB_YESNO);
1
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
20.08.2013, 12:51  [ТС]
действительно, даже не заметил что использую MessageBoxA
а какая разница между MessageBoxA и MessageBox ?
только что в MessageBoxA нужно ввести окна с которого вызывается MessageBoxA ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.08.2013, 13:11
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от tdo22 Посмотреть сообщение
а какая разница между MessageBoxA и MessageBox ?
В XE4 (и вообще, начиная с 2009-го Билдера) - катастрофическая. MessageBox подставится как MessageBoxA для неюникодного приложения, и как MessageBoxW - для юникодного. Вот и корень всех бед. Я вообще никогда не использую явные указания A/W... Компилятор/препроцессор (в зависимости от настроек) сами разберутся. И L"" заменяю на _T(""), с подключением tchar.h, чтобы при переходе туда/сюда от ANSI к Unicode и обратно (бывает, что клиенты не хотят Юникодные версии, подавай им ANSI, и всё тут) не править все время программу, а просто переключить "TCHAR maps to ..." в настройках проекта...
3
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
22.08.2013, 20:35
А как собрать цепь значений (string) из нескольких wchar_t / char переменных?

C++
1
2
3
wchar_t ID[5];
 
_wcspcpy(Lines[++NL].CharArray, String(L"значение"+ID).w_str() );
Я делаю вывод чека на принтер, каждая позиция в структуре строки должна быть на своём месте. По-этому я создал структуру, а теперь мне надо передать её одним махом из struct в wchar_t LINE[50].


П.С. wchar_t использую т.к. изначально не знал, что кириллицу можно хранить в char, а переделывать всё уже нет времени.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.08.2013, 21:52
Цитата Сообщение от UI Посмотреть сообщение
Я вообще никогда не использую явные указания A/W... Компилятор/препроцессор (в зависимости от настроек) сами разберутся. И L"" заменяю на _T(""), с подключением tchar.h, чтобы при переходе туда/сюда от ANSI к Unicode и обратно (бывает, что клиенты не хотят Юникодные версии, подавай им ANSI, и всё тут) не править все время программу, а просто переключить "TCHAR maps to ..." в настройках проекта...
А Я напротив предпочитаю писать явно и не зависеть от настроек проекта, среды и прочих прибобахов которые тяжело обнаружить сразу, и нет необходимости присоединять левый tchar.h который то в некоторых версиях подключен в некоторых нет, а соответственно и _T("") где виден, а где нет ( я уже не говорю что этот макрос выглядет страшно)

Что касается переключений и переносимости версий, то я насчет этого не питаю иллюзий ....
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.08.2013, 23:16
Цитата Сообщение от Kukstyler Посмотреть сообщение
А как собрать цепь значений (string) из нескольких wchar_t / char переменных?
Например, по-простому вот так, хотя временными объектами, на самом деле, лучше не злоупотреблять:
C++
1
2
wchar_t ID[5];
_wcspcpy(Lines[++NL].CharArray, ( String( "значение" ) + String( ID ) ).w_str() );
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
27.08.2013, 21:18
BRcr, проблема в том, что переменных (как ID) несколько. При только одной переменной ошибок нет...
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.08.2013, 23:30
Цитата Сообщение от Kukstyler Посмотреть сообщение
BRcr, проблема в том, что переменных (как ID) несколько.
И все равнозначно передаются в конструкторы класса String? И именно где-то на этом месте возникает ошибка?
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
28.08.2013, 15:59
BRcr, именно! То есть не получается вставить через " + " несколько преобразований char array переменных:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int    NL = 0;
LINE * Lines;
 
Lines = new LINE [NL];
 
struct {
wchar_t ID[5];
wchar_t a[1];
wchar_t IMYA[32];
wchar_t b[1];
wchar_t KOL[2];
wchar_t c[1];
wchar_t CENA[8];
} REC;
...
_wcspcpy(Lines[++NL].CharArray, String(REC.ID).w_str() + String(REC.IMYA).w_str() );
Выдаёт следующую ошибку:

[BCC32 Error] Unit1.cpp(272): E2085 Invalid pointer addition
Full parser context
Unit1.cpp(194): parsing: void _fastcall TForm1::BitBtn1Click(TObject *)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.08.2013, 18:09
Налицо разница между тем, что я показал:
C++
1
_wcspcpy(Lines[++NL].CharArray, ( String( "значение" ) + String( ID ) ).w_str() );
И тем, что пишешь ты:
C++
1
_wcspcpy(Lines[++NL].CharArray, String(REC.ID).w_str() + String(REC.IMYA).w_str() );
Отсюда и ноги растут. К слову, ошибка "E2085 Invalid pointer addition (C++)" прямым текстом сообщает, что, дескать, "Your source file attempted to add two pointers together." Пояснения к ошибкам следует узнавать и изучать, иначе взаимопонимания с компилятором не будет.
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
29.08.2013, 02:10
Цитата Сообщение от BRcr Посмотреть сообщение
Налицо разница между тем, что я показал:
Именно потому, что есть разница, я изначально и спрашивал о том

Цитата Сообщение от Kukstyler Посмотреть сообщение
как собрать цепь значений (string) из нескольких wchar_t / char переменных?
То есть char_field1 + char_field2 + char_field3 и/или char_field1 + " " + char_field2 + " " + char_field3

Цитата Сообщение от BRcr Посмотреть сообщение
Пояснения к ошибкам следует узнавать и изучать, иначе взаимопонимания с компилятором не будет.
Данное пояснение я искал, но внятного (для меня, чайника) объяснения, почему так и как сделать то, что мне надо - так и не нашёл. Причём тут pointer - я тоже не понял. Ведь я не передаю переменные в виде *char_field или &char_field...

Надо сделать char_field1 + char_field2 + char_field3. Поискал и на других сайтах (не только на Embarcadero), но так и не нашёл ответа, как это делается.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.08.2013, 14:16
Возможно, для вашего случая сработает вот это:__
C++
1
2
3
    _wcspcpy(Lines[NL].CharArray,REC.ID) ;
    _wcspcpy(Lines[NL].CharArray+sizeof(REC.ID)/2,L" ") ;
    _wcspcpy(Lines[NL].CharArray+sizeof(REC.ID)/2+1,REC.IMYA);
Я не знаю, что у вас Lines[i], предполагается, что это структура (массив wchar_t). В примере массив из одной структуры копируется в массив другой структуры (Lines[]) по смещению, задаваемому суммой (смещение задается в единицах символов юникода - 2 байта -, поэтому размер массивов делится пополам); потом добавляется "пробел" и след. массив. Можно применить и wcsncpy(Lines[NL].CharArray, REC.ID, sizeof(REC.ID)); с явным заданием макс. длины копируемого массива.
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
29.08.2013, 14:28
BRcr, nick42, вопрос решён следующим способом:


C++
1
2
3
4
5
     _wcspcpy(Lines[NL].CharArray,
        ( String ( String(REC.ID)   + " "
                 + String(REC.IMYA) + " "
                 + String(REC.KOL)  + " "
                 + String(REC.CENA) ).w_str() ) );
Большое спасибо за помощь!
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.08.2013, 18:25
Цитата Сообщение от Kukstyler Посмотреть сообщение
вопрос решён
Это радует.
Цитата Сообщение от Kukstyler Посмотреть сообщение
Данное пояснение я искал, но внятного (для меня, чайника) объяснения, почему так и как сделать то, что мне надо - так и не нашёл. Причём тут pointer - я тоже не понял.
Это не очень. Понимание кроется в результате работы метода w_str( ), так как именно указатель он и возвращает.
Что переводит утверждение:
Цитата Сообщение от Kukstyler Посмотреть сообщение
Ведь я не передаю переменные в виде *char_field или &char_field...
- в разряд утверждений ошибочных и сформированных на основе недостаточного изучения предмета. (преподы на этом моменте заулыбались )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2013, 18:25
Помогаю со студенческими работами здесь

MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал?
Здравия всем! Никак не найду нужный MB_*, как можно сделать так, чтобы если сделать MessageBox модальным, при клике по родительскому...

При нажатии в одном messagebox "Нет" всё равно появляется другой messagebox
При удалении записи сделал messagebox с подтверждением Да или Нет. При нажатии Нет всё равно выходит messagebox "Выбранная запись...

Переменная=Документ.имя. Сделать выборку всех документов с именем Переменная
Привет всем. У меня есть проблема и варианты решения, но они не работают. Проблема вот такая: Есть переменная Документ1 в...

Модульная переменная или блочная статическая переменная: что лучше
Переменная (тип String) нужна на всем протяжении работы программы. Нужен совет опытных - что предпочтительнее: модульная переменная или...

Проблема с Adodc: 'Переменная объекта или переменная блока With не задана'
В свойствах самого контрола (MS ADO Data Control) проверка подключения к атблице (подключаюсь через ODBC) проходит нормально. Когда же...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru