Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Русский язык в c++ builder


Автор: pavelslap 1.12.2009, 16:04
Здравствуйте! Т.к. ваш форум самый лучший, хочу задать ещё один вопрос. 

Я написал программу на билдере 6 дома, а когда открываю её на другом ПК, русские буквы превращаются в знаки вопроса. Как решить эту проблему фонтов? smile 

Автор: A5uKa 1.12.2009, 16:10
Цитата

Т.к. ваш форум самый лучший
  smile 

Засунуть фонт в ресурс

Автор: pavelslap 1.12.2009, 16:17
Цитата(A5uKa @ 1.12.2009,  16:10)
Засунуть фонт в ресурс

Обьясните, пожалуйста чайнику как именно это организовать  smile 

Автор: A5uKa 1.12.2009, 20:47
http://msdn.microsoft.com/en-us/library/ms753303.aspx



Цитата

1) Создаешь файл с названием ну скажем embededfont.rc:
100 RCDATA "имя_файла_шрифта"

Вообще-то, есть спец. тип ресурса FONT, но у меня почему-то на него brcc-шка ругаецца... Может он устарел либо я чего-то не знаю...

2) Компилируешь embededfont.rc с помощью brcc32.exe (должен лежать в папке bin Builder'a/студии):
brcc32.exe embededfont.rc

Должен получиться embededfont.res.

3) Открываешь код проекта, добавляешь туда строки аналогично мне:
#include <vcl.h>
#include "memory"//<= ++ Добавить ++
#pragma hdrstop

#pragma resource "embededfont.res"//<= ++
//---------------------------------------------------------------------------
USEFORM("Unit4.cpp", Form4);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        //Добавить от сих...
        const int IDF_EMBEDED = 100;
        HANDLE hEmbededFont = 0;
        DWORD dwFontsInstalled = 0;
        try
        {
            std::auto_ptr<TResourceStream> Resource(new TResourceStream((int)HInstance, IDF_EMBEDED, RT_RCDATA));
            hEmbededFont = AddFontMemResourceEx(Resource->Memory, Resource->Size, 0, &dwFontsInstalled);
        }
        catch(EResNotFound&)
        {
            //просто задушить исключение
        };
        //...и до сих

        Application->Initialize();
        SetApplicationMainFormOnTaskBar(Application, true);
        Application->CreateForm(__classid(TForm4), &Form4);
        Application->Run();

        //в принципе, не обязательно - по завершении приложении система все равно освободит шрифт
        if (hEmbededFont)
            RemoveFontMemResourceEx(hEmbededFont);
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}



гугли - темы с ресурсами никто не помнит =)

Автор: SerK 2.12.2009, 02:20
Еще может быть причина в следующем: нужно в свойстве Font устанавливать параметр Charset в Russian_Charset. Это делается в Object Inspector.

Автор: dumb 2.12.2009, 02:27
pavelslap, у всех компонент, умеющих выводить текст, есть свойство Font, в котором есть свойство Charset.
тебе нужно у всех твоих форм/панелей/лэйблов/итд изменить Сharset с DEFAULT_CHARSET на RUSSIAN_CHARSET.
в большой программе это проще всего сделать, поиском-заменой во всех файлах .dfm (проект не должен быть открытым в Builder'е)

edit: о, уже есть такой ответ smile

Автор: pavelslap 2.12.2009, 14:41
Всем спасибо большое, разобрался  smile 


M
dumb
если вопрос решен, то жмем "Пометить как решенный" (вверху справа)

Автор: NYX 23.12.2009, 02:49
Может с тем вторым компом что то не так? smile Иногда бывает что при модифицированной винде, приходится кодировку править smile На другом компе тока новая программа каряки выдает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)