|
Маэстро
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
|
||||||||
Кириллица в WIN32 GUI приложениях04.10.2009, 11:59. Показов 10886. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|