Программа-полиглот 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, ее вполне хватит для среднего шароварщика. |