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 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.