|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||||||||
Кириллица в WIN32 GUI приложениях04.10.2009, 11:59. Показов 10870. Ответов 13
Метки нет (Все метки)
Всем привет.
Снова опять к вам, вопрос у меня давний и наболевший, моими силами не решаемый. Ребята, буду благодарен и признателен. Просто уже не знаю, что куда приткнуть...Я хочу чтобы моя программа работала в английской версии OS, независимо от выбора языка в панели управления - язык и региональные стандарты. Тоесть если по умолчанию у пользователя выставлено English, то чтобы моя программа показывала русский текст, а не знаки вопросов. Конечно, можно выбрать Russian, но хотелось бы иметь независимую версию от настроек. Знаю, что Vista, не корректно работает с установками и если в Инспекторе объектов, в свойстве Font - Charset выбрать - Default_Charset, то даже на локализованой версии Vista, будут иероглифы, нужно выбирать значение Russian_Charset. В Windows XP, Windows 7, всё работает отлично не зависимо от настроек Charset. С этим я разобрался, вот осталось только "приручить" программу для английских версий OS'и. Вот что я использую. Вместо версии WinMain попробовал использовать - wWinMain, но выходит ошибка компоновщика:
Этот совет - Шаг 90 - Исправление ошибок, связанных с настройками проектов не помогает, так же. И в общем есть несколько вопросов:1. Как устранить всё же эту ошибку компоновщика? (Поможет ли это устранение создать программу с корректным отображением кирилицы на англ. осях?) 2. Покажите на примере, что нужно добавить или дописать, чтобы программа корректно отображала кирилицу на английских операционных системах не зависимо от настроек?
0
|
||||||||
| 04.10.2009, 11:59 | |
|
Ответы с готовыми решениями:
13
Вывод нулей перед числом в приложениях GUI WIN32 Кириллица WIN32 CA Графика в консольных приложениях WIN32 |
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||||||
| 04.10.2009, 12:16 [ТС] | ||||||
|
Забыл дописать, пробовал использовать следующий макрос:
0
|
||||||
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||
| 06.10.2009, 15:05 [ТС] | ||
|
...Итак, поскольку ответ не был получен, я решил поспрашивать о своём вопросе ещё на других ресурсах, поскольку ссылки на другие ресурсы запрещены, то выкладываю ответ в форме цитаты:
Резюмимрую: Вопрос формально решён, но в целом, полурешён. Если всё же можно что-то сделать с Borland C++ Builder 6.0, пишите, буду благодарен советам и помощи.
0
|
||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 06.10.2009, 22:34 | |
|
Сел я с отладчиком смотреть как Винда преобразует Ansi в Unicode при вызове неюникодных функций. Кто не знает, то все функции типа TextOutA MessageBoxA есть просто переходниками к функциям TextOutW MessageBoxW с преобразованием 1 байтовых строк в 2 байтовые. Так вот, я хотел найти момент, где вызывается функция MultiByteToUnicode и может подменить параметр исходной кодировки(а она ACP) на, например 1251(win-cirilyc), так вот лазая по всем просторам забубенных вызовов, я увидел, что внутри там такая каша. ACP можно получить несколькими способами(а можно и не получать её вообще), в ntdll.dll есть еще куча функций, которые делают практически одно и тоже. Некоторые функции есть просто переходниками друг к другу. Где там корень? Думал подменивать значение которое получается из настроек nls в реестре на свои, так приложение их не читает. Странно это все. Даже и не знаю.
Надо копать глубже. Как будет свободное время надо будет еще раз пересмотреть.
1
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
| 07.10.2009, 10:45 [ТС] | |
|
Otaka, Спасибо за неравнодушие к вопросу.
0
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||||||
| 09.10.2009, 16:04 [ТС] | ||||||
|
Ребята, в общем, по этому вопросу у меня почти всё получилось, кирилический текст корректно отображается на элементах управления и уведомлениях MessageBox. Текстовые файлы с русским текстом сохранённые в кодировке UTF-8, (там ещё галочка BOM устанавливалась) корректно загружаются в Memo1 и отображаются. Проект решения прикреплю чуть позже, после окончательной отладки, возможно кому-то будет интересен.
Но вот с чем ещё столкнулся и как решить не умею. Программа запускается на английской системе, в Memo вводится русский текст, и файл сохраняется автоматом по нажатию на кнопку Сохранить:
Как правильно сохранить файл .txt, чтобы он сохранялся правильно, а при загрузке обратно, отображал не вопросительные знаки, а нормальный русский текст. С функциями перекодирования работать не умею, в гугле искал, но там большая часть на примеры Delphi, я в нём не понимаю, если не сложно покажите на примере.
0
|
||||||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 09.10.2009, 20:10 | |
|
Я не знаю, но у меня в 6 билдере при использовании стандартных компонентов никакой UTF-8 не работает. Но прекрасно работает юникод при использовании TMS component pack(UNICODE). А перекодировка - WideCharToMultiByte, почитай справку по функции.
0
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
| 09.10.2009, 20:36 [ТС] | |
|
0
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|||||||||||||
| 11.10.2009, 14:11 [ТС] | |||||||||||||
Пробовал делать так, но это неправильно. ![]()
Мне бы на примере показать, на живом коде...
0
|
|||||||||||||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
||||||
| 11.10.2009, 17:17 | ||||||
|
Если у тебя билдер 2009, то никакие TMS тебе не нужны. Все и так юникодное. А как пример преобразования скидываю код, которым я всегда пользуюсь.
1
|
||||||
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|||||||||||
| 11.10.2009, 17:54 [ТС] | |||||||||||
|
Otaka, Спасибо, подобный код через гугл находил, но я не знаю, как прикрутить этот код к кнопке Button. Весь текст находится в Memo, как его передать функции?
Файл .h
0
|
|||||||||||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 11.10.2009, 18:34 | |
|
Ты знаешь, я так подумал, этот код не поможет.
Ты скажи лучше, в Билдере 2009 там у Memo->Lines какой там внутри тип, AnsiString или WideString?
0
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|
| 11.10.2009, 19:14 [ТС] | |
|
0
|
|
|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
|||||||
| 14.10.2009, 12:34 [ТС] | |||||||
|
Otaka, Мне помогли решить вопрос.
Цитату привожу.
![]()
1
|
|||||||
| 14.10.2009, 12:34 | |
|
Помогаю со студенческими работами здесь
14
Не выводится консоль в Win32 приложениях Использование графических ресурсов в приложениях Win32 Интерфейс (GUI) в приложениях WinAPI Scilab и кириллица при создании GUI оболочки GUI HTML Win32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|