Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

Программа-полиглот

Islander (islanderx@mail.ru)

Спецвыпуск: Хакер, номер #053, стр. 053-072-4


Я советую использовать префиксы для всех ресурсов dll по формату: название формы "_" имя ресурса. Например, если у нас на форме с именем frmMain имеется кнопка btnExit, то название строкового ресурса будет выглядеть так: frmMain_btnExit. С помощью такой системы префиксов названия ресурсов будут удобно отсортированы, и добавление нового не составит большого труда. Имя ресурса с такими префиксами в функции TranslateFormComponents будет выглядеть следующим образом:

Form.name + ‘_’ + Form.Components [i].name

Еще одна тонкость - обязательно проверять наличие ресурса перед тем как загрузить его, используя функцию:

HRSRC FindResource(

HMODULE hModule,

LPCTSTR lpName,

LPCTSTR lpType);

Иначе будут вылезать exception'ы, если вдруг бедный студент-чужеземец схалтурит и не переведет пару строчек.

Аналогично функции TranslateFormComponents перепиши TranslateMessage. Далее все абсолютно так же, как и с lng-файлами: создаешь процедуру ApplyTranslate в классе формы и вызываешь ее по мере необходимости. Для загрузки графики ты можешь использовать функции LoadIcon и LoadBitmap, подробное описание которых можно найти в MSDN. Я думаю, ты все понял и дальше разберешься сам. Только не забудь обучить бедного забугорного студента пользоваться Restorator'ом!

Юникод

Если твоя программа должна поддерживать возможность работы более чем с двумя различными языками сразу или же обеспечивать поддержку экзотических языков, стоит подумать о том, чтобы сразу оснастить свой продукт поддержкой юникода. Тут не все просто: если в Windows 2k/XP/2003 юникод полностью поддерживается на уровне ядра, то в Windows 9x/ME возникнут трудности. Поэтому придется определиться с тем, должна ли твоя программа работать под Win9x. Однозначных советов по этому поводу давать не стану, но скажу, что поддержка Win9x все еще очень желательна для утилиток массового использования и сравнительно недорогих.

Если же твоя программа будет работать только в Windows 2k/XP/2003, то в MS Visual С++ тебе будет достаточно определить макрос UNICODE в настройках проекта и все элементы управления автоматически начнут поддерживать юникодные надписи. В Delphi/Builder будет немного сложнее: без дополнительных библиотек тут не обойтись. Рекомендую скачать TNT Unicode Controls и использовать элементы управления только из этой библиотеки, так как они полностью поддерживают юникод. Библиотека бесплатная и распространяется с открытым исходным кодом. Можно скачать ее тут: http://download.tntware.com/delphi_unicode_controls/TntUnicodeControls.zip.

Если твоя программа должна поддерживать юникод в Windows 9x/ME, то тут все гораздо сложнее. В MS Visual C++, кроме макроса UNICODE, надо будет использовать специальную библиотеку unicows.lib, однако всех проблем она не решит. Например, все меню и заголовки окон придется перерисовывать вручную. Эта тема очень обширная, поэтому советую почитать в MSDN раздел Microsoft Layer for Unicode. Delphi/Builder создаст проблем. TNT Unicode Controls под Win9x/ME уже не выручат, так что надо искать что-нибудь другое. Сразу хочу тебя огорчить: мне не удалось найти бесплатного пакета юникодных компонентов на все случаи жизни. Может быть, ты сможешь? Я остановил свой выбор на пакете ElPack (www.lmd.de/products/lmdelpack). Стандартная версия стоит $99, ее вполне хватит для среднего шароварщика.

Назад на стр. 053-072-3  Содержание  Вперед на стр. 053-072-5