walexw Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 Я извиняюсь, если не в ту тему пишу... Вопрос такой: в FireMonkey приложении использую MessageDlg. На Андроидном устройстве русские буквы в сообщении отражаются ромбиками со знаками вопроса. Это как-то лечится? Если кто знает, подскажите или дайте ссылку. Спасибо. Цитата Ссылка на комментарий
0 haword Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 лечится правильной кодировкой текста. от куда текст берете? Цитата Ссылка на комментарий
0 krapotkin Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 в андроиде нет Windows-xxx кодировок там сплошной Unicode и вопрос к вам - где и как вы берете свои данные и почему не переводите их в utf-8 Цитата Ссылка на комментарий
0 walexw Опубликовано 3 февраля, 2016 Автор Поделиться Опубликовано 3 февраля, 2016 Текстовые фразы для MessageDlg создаю таким макаром: AnsiString str = "русский текст"; Его вставляю в сообщение. В windows это работает, поэтому стал использовать (пишу первое приложение под firemonkey). Ну и налетел на грабли с Андроидом, поэтому собственно и спрашиваю. Ошибку свою понял, надо ansistring переводить в юникод, затем использовать. Спасибо. Цитата Ссылка на комментарий
0 Error Опубликовано 4 февраля, 2016 Поделиться Опубликовано 4 февраля, 2016 Хм, как вы вообще смогли скомпилировать с AnsiString? - мобильный компилятор должен был ругаться на это Цитата Ссылка на комментарий
0 haword Опубликовано 4 февраля, 2016 Поделиться Опубликовано 4 февраля, 2016 достаточно объявить просто как стринг и все. Цитата Ссылка на комментарий
0 Rusland Опубликовано 4 февраля, 2016 Поделиться Опубликовано 4 февраля, 2016 Ошибку свою понял, надо ansistring переводить в юникод, затем использовать. Просто замените AnsiString на String Цитата Ссылка на комментарий
0 walexw Опубликовано 4 февраля, 2016 Автор Поделиться Опубликовано 4 февраля, 2016 Замена AnsiString на String (и на UnicodeString) ничем не помогла. На экране появляются ромбики со знаками вопроса. Уже час подбираю синтаксис перевода стринга в юникод, опять грабли, что ни подставлю, компилятор не пускает. Может есть у кого работающее решение перевода в юникод. Цитата Ссылка на комментарий
0 krapotkin Опубликовано 5 февраля, 2016 Поделиться Опубликовано 5 февраля, 2016 нет там никакого перевода в Delphi сейчас нативный юникод создайте чистый проект с одной строкой ShowMessage Цитата Ссылка на комментарий
0 haword Опубликовано 5 февраля, 2016 Поделиться Опубликовано 5 февраля, 2016 проект с ошибкой выложите тогда нагляднее будет понять что к чему. ибо код - procedure TMainForm.TryClose; begin MessageDlg('Выйти из программы?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0, procedure(const AResult: TModalResult) begin if AResult = mrYes then begin Application.Terminate; end; end); end; показывает на русском текст как на андроиде так и на винде. Цитата Ссылка на комментарий
0 walexw Опубликовано 8 февраля, 2016 Автор Поделиться Опубликовано 8 февраля, 2016 По совету krapotkin и haword, собрал новый проект, из одной кнопки и одной строки кода void __fastcall TForm1::Button1Click(TObject *Sender) { MessageDlg("русский текст", TMsgDlgType::mtWarning, TMsgDlgButtons() << TMsgDlgBtn::mbOK, 0, 0); } Если 'русский текст' пишу в одинарных кавычках, компилятор пишет: Character constant too long (or empty) Пропускает только с двойными. Скриншот планшета с результатом не смог вставить в сообщение (видимо что-то со скриптом форума) Вот ссылка на скриншот: http://www.zigsite.ru/Screenshot.jpg Поэтому и просил помочь с переводом в юникод. Проект на C++ builder. RAD EX 10 С русскими надписями и русской БД проблем нет, только с системными сообщениями. Цитата Ссылка на комментарий
0 Kitty Опубликовано 8 февраля, 2016 Поделиться Опубликовано 8 февраля, 2016 (изменено) А если так? MessageDlg(L"русский текст",... void __fastcall TForm1::Button1Click(TObject *Sender) { MessageDlg(L"русский текст", TMsgDlgType::mtWarning, TMsgDlgButtons() << TMsgDlgBtn::mbOK, 0, 0); } Изменено 8 февраля, 2016 пользователем Kitty Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 8 февраля, 2016 Модераторы Поделиться Опубликовано 8 февраля, 2016 Попробуйте ПКМ в редакторе кода -> File Format -> UTF8 Цитата Ссылка на комментарий
0 walexw Опубликовано 9 февраля, 2016 Автор Поделиться Опубликовано 9 февраля, 2016 Kitty, большое спасибо! Ваш вариант прекрасно работает! Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 9 февраля, 2016 Модераторы Поделиться Опубликовано 9 февраля, 2016 А если так? MessageDlg(L"русский текст",...void __fastcall TForm1::Button1Click(TObject *Sender) { MessageDlg(L"русский текст", TMsgDlgType::mtWarning, TMsgDlgButtons() << TMsgDlgBtn::mbOK, 0, 0); } Объясните не посвящённым в с++, что значит L? Цитата Ссылка на комментарий
0 walexw Опубликовано 9 февраля, 2016 Автор Поделиться Опубликовано 9 февраля, 2016 Я не силен как учитель... По простому, в моем понимании L перед стрингом делает его wchar_t Цитата Ссылка на комментарий
0 haword Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 ну сразу бы и сказали что на сях пишете там свои преобразования. на паскале все по умолчанию и без бубнов пашет. Цитата Ссылка на комментарий
0 Kitty Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 Enabling C++ Applications for Unicode: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Enabling_C%2B%2B_Applications_for_Unicode String constants, such as "string constant", are still narrow (char*), so you cannot pass them to functions of RAD Studio frameworks and libraries that take PChar as you did before. You can pass the constant to functions of RAD Studio frameworks and libraries with a PChar parameter if you prefix the constant with L, as in: L"string constant" Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Rusland Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 Эта байда c L начиная с C++Builder2010 Цитата Ссылка на комментарий
Вопрос
walexw
Я извиняюсь, если не в ту тему пишу...
Вопрос такой: в FireMonkey приложении использую MessageDlg.
На Андроидном устройстве русские буквы в сообщении отражаются ромбиками со знаками вопроса.
Это как-то лечится?
Если кто знает, подскажите или дайте ссылку.
Спасибо.
Ссылка на комментарий
18 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.