procedure MyWriteln (const S: string);
var
NewStr: string;
begin
SetLengtn (NewStr, Length (S));
CharToOem (PChar (S), PChar (NewStr));
Writeln (NewStr);
end;
...
MyWriteln ('текст') -
Як русифікувати delphi
Прочитавши: 2595
Русифікація програм - справа важлива, особливо для користувачів, що не володіють іноземними мовами. Досить часто користувачі програми Delphi задаються питанням, як її русифікувати.
Інструкція
Справа в тому, що кодування OEM і ANSI (в якій працює Delphi) не збігаються. У них різні позиції кириличних символів. У ANSI також є діакритичні символи, яких в OEM немає. Зате в другій присутні символи псевдографіки, які незамінні при зображенні таблиць, хоча це і не дуже затребуване. І все ж варто зауважити, що в цілому ці таблиці взаємозамінні - можливості виведення текстової інформації у них однакові.
Є кілька способів вирішення проблеми русифікації. Перший - робота в OEM-редакторі. Можна спочатку підготувати критичні до кодової таблиці частини тексту програми в редакторі, який працює в кодуванні OEM. Досить просте, але в той же час ефективне рішення. Особливо це стосується написання локальних утиліт, в яких висновок інформації, тим не менш, затребуваний сильно.
Що стосується недоліків даного способу, тут можна позначити роботу поза звичного багатьом IDE з його наворотами, які здорово відрізняють життя, як то: кодування, компіляція, налагодження. І все це, що кажуть, «в одному флаконі». Крім того, при розростанні проекту починають проявлятися певні складнощі, коли починають використовуватися створені за допомогою кодування ANSI сторонні рядкові ресурси.
Якщо проект безпосередньо включених в код рядків (hard-coded) не містить, можна винести всі строкові ресурси в окремі модулі, локализуя їх потім під ту кодування, яке потрібно. Благо утиліт, які змінюють кодування файлів, в мережі повно.
Тепер про використання фільтруючих процедур. У Windows API містяться функції, що допомагають перетворювати кодування ANSI і OEM одна в іншу. Це OemToChar і CharToOem. Вони і використовуються при виведенні тексту із заміною фрагментів Writeln ('текст') - на наступні фрагменти:
Що стосується недоліків цього способу, це неможливість використовувати розширений синтаксис Write і захаращення тексту додатка викликом фільтруючих процедур. Коли треба русифікувати готове додаток з множинними зверненнями до Write, це стає серйозною проблемою.
І останнє - зміна кодової сторінки консолі за допомогою засобів Windows API. Метод цей документований, до речі. Тільки заковика в тому, що функція в Windows 95 і 98 не працює. Хоча якщо працювати додаток буде виключно в Windows NT, в цьому випадку можна взяти на озброєння функцію SetConsoleOutputCP (866).