Сборник часто задаваемых вопросов по программированию в среде Borland C++ Builder

           

Как организовать подгрузку...



Вопрос: Как организовать подгрузку ресурсов из DLL для разноязычных версий? Как мне записать и считать из DLL свойство Caption компонента TButton(я делаю русскую и анг. версию) и при переключении приложение должно считать из соответствующих DLL разные свойства компонентов).

Ответ : Попробуем обьяснить. Процесс долгий но простой. 1. Создадим h-файл где будут идентификаторы сообщений например code: -------------------------------------------------------------------------------- static const BT_NEW_CAPTION = 1; static const BT_SAVE_CAPTION = 2; static const BT_LOAD_CAPTION = 3; .... -------------------------------------------------------------------------------- 2. Создаем n-файлов для n языков, следующего содержания. Например для руского code: -------------------------------------------------------------------------------- #include "consts.h" STRINGTABLE BEGIN BT_NEW_CAPTION "Создать" BT_SAVE_CAPTION "Сохранить" BT_LOAD_CAPTION "Загрузить" END -------------------------------------------------------------------------------- и для английского code: -------------------------------------------------------------------------------- #include "consts.h" STRINGTABLE BEGIN BT_NEW_CAPTION "New" BT_SAVE_CAPTION "Save" BT_LOAD_CAPTION "Load" END

-------------------------------------------------------------------------------- 3. при помощи утилиты brcc32 создаем из этих файлов res файлы, т.е. в командой строке пишем brcc32.exe -r lang_rus.rc brcc32.exe -r lang_eng.rc тем самым мы подготовили ресурсные файлы 4.создаем проект для руской длл к которому подключаем (Project->Add to project...)lang_rus.res. Компилируем, получаем длл файл. Повторяем шаг 4 для английской версии. 5.переходим к гланой программе. создаем функцию которая будет менять надписи на кнопках. Входные данные для функции будет имя длл. code: -------------------------------------------------------------------------------- #include "consts.h" void ChangeLang(String szDllName) { HINSTANCE hInst = LoadLibrary(szDllName.c_str()); if(NULL == hInst){ MessageBox(Application->Handle, String().sprintf("Cannot load the '%s' library ", szDllName).c_str(), "Error", MB_OK | MB_ICONERROR); return; } char szBuff[1024]; LoadString(hInst, BT_NEW_CAPTION, szBuff, sizeof(buff)); Form1->btNew->Caption = szBuff; LoadString(hInst, BT_SAVE_CAPTION, szBuff, sizeof(buff)); Form1->btSave->Caption = szBuff; LoadString(hInst, BT_LOAD_CAPTION, szBuff, sizeof(buff)); Form1->btLoad->Caption = szBuff; FreeLibrary(hInst); } -------------------------------------------------------------------------------- 6. вызываем эту функцию с нужным параметром, например ChangeLang("lang_rus.dll"); !!!! файлы .длл должны быть в той же папке что и .ехе файл программы, в противном случае придется писать полный путь к длл. Например, если в папке с прогрпммой есть подпапка Languages где находятся длл тогда вызов функции будет таким ChangeLang("Languages\\lang_rus.dll"); --------------------------------------------------------------------------------

Содержание раздела