Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Кирилица в WIN32 GUI приложениях независимо от настроек в контрольной панели

Ответить
Настройки темы
C/C++ - [решено] Кирилица в WIN32 GUI приложениях независимо от настроек в контрольной панели

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: 7z Registry.7z
(222.1 Kb, 17 просмотров)
Доброго всем здоровья. Нужна ваша помощь. Возникла необходимость написать программку, чтобы она работала на Windows XP и Widnwows Vista (если будет работать на Windows 7, будет вообще здорово, но проверить негде... Нет знакомых с семёркой). На ХР работает как часики, а на Vista не совсем. Не отображаются правильно русские символы. Скриншот приложу.



Проверял на Windows Vista Home Premium (SP1). Версия русская.

Получается следующее, интерфейс на русском, и некоторые записи (описания в GroupBox) не отображают правильно кирилицу, а некоторые, на кнопках и переключателях нормально отображают, что сделать - не знаю совсем. Прошу помощи. Английский интерфейс это не вариант потому что там ещё будет ComboBox (при выборе локализации "русская Windows") в котором будет выбор текста на русском, по другому нельзя. Архив проекта прикрепляю, там находится также и исполнимый файл. Программная среда в которой разрабатывается приложение:
Цитата из своего профиля:
Borland C++ Builder 6.0 Enterprise Suite

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 12:46, 14-07-2009

 

Аватара для Dmitrijan

Старожил


Сообщения: 159
Благодарности: 37

Профиль | Отправить PM | Цитировать


Drongo, Кое что могу подсказать. Я тоже как-то разрабатывл програмку (правда на Delphi)
и столкнулся с такой же проблемкой.Из под Виста-кракозябры, из под XP все гуд.Правда не все надписи.Оказалось надо было в свойствах шрифтов выставить CharSet: RUSSIAN_CHARSET.А те которые отображали кракозябры было (ANSI_CHARSET).Но это опять же Delphi, но думаю свойства шрифтов во всех языках одинаковы.
P.S. Глянул вашу програмку из под семерки все гуд (все на русском)!
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:32, 14-07-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dmitrijan:
Оказалось надо было в свойствах шрифтов выставить CharSet: RUSSIAN_CHARSET.А те которые отображали кракозябры было (ANSI_CHARSET). »
Сейчас проверим. Да, действительно, настройка есть, изменил, сейчас попробуем на Vista, отпишусь. А эти настройки не будут влиять на отображение символов в семёрке?
Цитата Dmitrijan:
Глянул вашу програмку из под семерки все гуд (все на русском)! »
А если не затруднит, посмотрите, в поле Edit появляется имя учётной записи?

Цитата Dmitrijan:
Но это опять же Delphi, но думаю свойства шрифтов во всех языках одинаковы. »
Всё верно.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 14-07-2009 в 18:12. Причина: Добавил инфу


Отправлено: 17:24, 14-07-2009 | #3


Аватара для Dmitrijan

Старожил


Сообщения: 159
Благодарности: 37

Профиль | Отправить PM | Цитировать


Цитата Drongo:
А эти настройки не будут влиять на отображение символов в семёрке? »
Только что запустил семерку, проверил свою прогу все Ok Значит и из под Vista и из под Seven настройка работает одинаково - положительно.
Цитата Drongo:
А если не затруднит, посмотрите, в поле Edit появляется имя учётной записи? »
Все нормально, имя учетной записи есть (правда у меня учетная запись на англ. "Dmitrijan")
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:44, 14-07-2009 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dmitrijan:
(правда у меня учетная запись на англ. "Dmitrijan") »
Проверили - русская учётка работает, определяется.
Протестировали на Vista, по вашему совету изменил в свойствах Font -> Charset - значение с DEFAULT_CHARSET на RUSSIAN_CHARSET и всё заработало правильно:



Dmitrijan, Спасибо!!! Вопрос успешно решён.

P.S. А всё-таки, почему при значении - DEFAULT_CHARSET на семёрке всё ок, а на висте кривовато?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:04, 14-07-2009 | #5


Аватара для Dmitrijan

Старожил


Сообщения: 159
Благодарности: 37

Профиль | Отправить PM | Цитировать


Цитата Drongo:
P.S. А всё-таки, почему при значении - DEFAULT_CHARSET на семёрке всё ок, а на висте кривовато? »
В принципе я не знаю почему так происходит, но думаю в Viste по дефолту стоит другая кодировка, отличающаяся от дефолтной Seven. Но это только мое мнение.
P.S. Очень рад, что у вас все получилось!!!
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:22, 14-07-2009 | #6


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте, это снова я, но уже с несколько другим вопросом. Вот с русской Windows всё в порядке, а если эту же программу с русским интерфейсом запустить на английской версии? Мне кажется вместо русских символов будут знаки вопроса "?????". Я так понял, что нужно русские шрифты загрузить в проект в ресурсы и использовать шрифт из внутренних ресурсов программы? Но я не знаю как это сделать. Покажите на примере кому не трудно.

читать дальше »
AddFontResource
int AddFontResource(LPCTSTR lpszFilename);
Возвращаемое значение
В случае успешного завершения функции возвращается количество добавленных шрифтов, в противном случае возвращается нулевое значение. В Windows NT более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
lpszFilename - указатель на заканчивающуюся нулем текстовую строку, содержащую корректное имя файла шрифта. Имя файла шрифта имеет расширение .fon для файлов ресурса шрифта, расширение .fnt для файлов шрифта, содержащих битовые образы символов, расширение ttf для файлов шрифтов TrueType и расширение .fot для файлов ресурсов шрифтов TrueType.


В гугле кое-что нашёл

Описание Функция AddFontResource позволяет добавить ресурсы шрифта из указанного файла в системную таблицу шрифтов. После этого данный шрифт может быть использован для вывода текста любым приложением Win32. Любые приложения, добавляющие или удаляющие шрифты из системной таблицы шрифтов, извещают об этом другие приложения посылкой сообщения WM_FONTCHANGE всем окнам верхнего уровня в операционной системе. Для посылки этого сообщения приложение должно использовать функцию SendMessage, в аргументе hWnd которой должно стоять значение HWND_BROADCAST. Как только приложение перестает использовать ресурс шрифта, загруженный функцией AddFontResource, оно должно удалить его функцией RemoveFontResource.

Только я всё равно не пойму, как добавить, встроить? шрифт в программу.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 17-07-2009 в 11:11. Причина: То что нашёл понятное для себя...


Отправлено: 10:47, 17-07-2009 | #7


Аватара для Dmitrijan

Старожил


Сообщения: 159
Благодарности: 37

Профиль | Отправить PM | Цитировать


Drongo, Возможно при установке значения шрифта RUSSIAN_CHARSET, шрифт включится в проект автоматически при компиляции.
В Delphi шрифты включал, помню как, а вот СИ++ извеняйте не работал в нем, могу написать как в Delphi если надо

Отправлено: 17:49, 17-07-2009 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dmitrijan:
В Delphi шрифты включал, помню как, а вот СИ++ извеняйте не работал в нем, могу написать как в Delphi если надо »
Конечно надо. Во всяком случае можно будет хоть попробовать понять. Если можно с комментариями.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:30, 17-07-2009 | #9


Аватара для Dmitrijan

Старожил


Сообщения: 159
Благодарности: 37

Профиль | Отправить PM | Цитировать


Drongo, Вот я включал шрифт по такой инструкции:

Включение шрифта в ваш EXE:

Создайте в текстовом редакторе файл с расширением *.rc , описывающий шрифт:

MY_FONT ANYOL1 "Bauhs93.ttf"

Первые два параметра могут быть любыми. Они будут использоваться в программе
позже.

Затем для создания *.res файла используйте компилятор командной строки BRCC32.EXE, поставляемый с Delphi. Если ваш файл на этапе 1 был назван MyFont.rc, командная строка в сеансе DOS должна выглядеть так:

BRCC32 MyFont

Программа добавит в компилируемый файл созданный ресурс .rc и создаст файл с тем же именем, за исключением расширения, которое будет .res: MyFont.res

В вашей программе добавьте директиву компилятора, чтобы включить вновь созданный файл:

{$R MyFont.res}

Правильным будет разместить его в секции реализации после строчки {$R *.DFM}.

Добавьте процедуру создания файла из ресурса, делающим шрифт доступным для использования. Пример:

procedure TForm1.FormCreate(Sender: TObject);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(hInstance, 'MY_FONT', Pchar('ANYOL1'));
Res.SavetoFile('Bauhs93.ttf');
Res.Free;
AddFontResource(PChar('Bauhs93.ttf'));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;

программное удаление шрифта:

procedure TForm1.FormDestroy(Sender: TObject);
begin
RemoveFontResource(PChar("Bauhs93.ttf"))
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;

Извените, но больше сегодня не смогу написать, конец рабочего дня
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:35, 17-07-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Кирилица в WIN32 GUI приложениях независимо от настроек в контрольной панели

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Конкурс - [решено] 270 настроек панели управления в одной папке Smarty Microsoft Windows 7 28 13-02-2012 08:38
Не работает GUI после выхода другова GUI sashadeg AutoIt 3 15-05-2009 22:03
[решено] проверка контрольной суммы nix_lamer Общий по Linux 1 17-01-2007 08:40




 
Переход