На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила ЧаВо (FAQ) разделов Паскаля
В этом разделе разрешено создавать только темы, в которых описано РЕШЕНИЕ какой-либо общей проблемы, или описание какого-либо аспекта языка Паскаль.
Обсуждение уже созданных тем разрешено, но только конструктивное, например указание на ошибку или уточнение имеющегося текста.

Также читать Требования к оформлению статей
Модераторы: volvo877, Romtek
  
> Кириллизация в Паскале, или как добавить поддержку русского языка в Паскале
    Если у Вас возникла такая проблема: Вы не можете включить русский язык в Паскале, то Вам нужно сюда %)

    Всё зависит от того, какой у Вас Паскаль, и какой Windows.

    Borland (Turbo) Pascal

    Стандартными комбинациями переключения раскладки в оболочке этих компиляторов являются:
    LeftCTRL+LeftShift - английская раскладка
    RightCTRL+RightShift - русская раскладка

    Если они не работают, то у вас скорее всего Windows (XP/2000/NT)
    Для этих разновидностей операционных систем есть такой способ:
    1) средствами Windows 2000
    Цитата
    Откройте ключ реестра:

    HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes
    Измените значение строковой переменной 00000409 с "us" на "ru"

    В файле С:\WINNT\System32\autoexec.nt пpописываете следующую стpоку:
    lh %SystemRoot%\System32\kb16 ru,866
    После перезагрузки системы переключение раскладки клавиатуры в DOS-приложениях будет производиться комбинациями Ctrl+Left Shift (английская) и Ctrl+Right Shift (русская).

    2) поставьте внешний русификатор, например, проверенный временем RKM v.3.0
    Цитата
    Удобнее всего прописать его в файле c:\windows\sytem32\autoexec.nt (аналогично kb16). Можно взять здесь:
    http://adsh.ukrweb.net/win2k/soft/rkm.php
    После того, как вы его выкачаете, распакуйте его куда-нибудь. А после в файле autoexec.nt впишите строчку
    <путь_к_rkm>\rkm.com
    Например c:\utils\rkm\rkm.com
    Раскладка должна переключаться по клавише RightCTRL
    Если это дело не работает как следует, или вы хотите переключать привычными клавишами, то можно попробовать и другие русификаторы. Например, keyrus (прикреплён к сообщению). С ним действовать аналогично, а переключается - как описано чуть выше
    http://www.3dnews.ru/reviews/software/win-xp-faq/index05.htm#1

    TMT Pascal 3.5(9) lite

    Если у вас TMT Pascal 3.5(9) lite, и в Паскале можно писать русскими, но при выводе на экран появляются каракули. Знайте, так у всех, у кого стоит этот паскаль. Это один из самых известных глюков этого компилятора. Видимо разработчики не думали, что компилятор будет пользоваться успехом у русскоязычных пользователей. Все русские буквы обычно есть в том или ином месте таблицы ASCII. Их место в этой таблице скорее всего зависит от операционной системы. Для всех ОС семейства Windows русские буквы в таблице ASCII (OEM) имеют следующие порядковые номера:
    Цитата
    128-159 - А-Я
    160-175 - а-п
    224-239 - р-я
    240 - Ё
    241 - ё
    Для украинского языка:
    242 - Є
    243 - є
    244 - Ї
    245 - ї

    А в ТМТ при написании программы используется кодировка Windows (ANSI), в которой русские буквы, которые вы вводите имеют другие порядковые номера.

    Если очень нужно писать на русском в ТМТ паскале есть два способа - универсальный, и одноразовый (если вам нужно сделать только сейчас, и потом уже не нужно будет).
    Универсальный способ заключается в том, чтобы написать функцию - конвертер, которая конвертирует русские буквы из Windows таблицы в DOS таблицу.
    Вот она (Украинские буквы тоже конвертируются):
    ExpandedWrap disabled
      function ANSI_to_OEM(s: string): string;
      var p: byte;
      begin
        for p := 1 to length(s) do
        case s[p] of
          'А'..'п': dec (s[p], 64);
          'р'..'я': dec (s[p], 16);
           'Ё','Є': inc (s[p], 72);
           'ё','є': inc (s[p], 57);
               'Ї': inc (s[p], 69);
               'ї': inc (s[p], 54);
        end;
        ANSI_to_OEM := s;
      end;

    И пользоваться ей к примеру так:
    ExpandedWrap disabled
      write(ANSI_to_OEM('Привет ВСЕМ. Это ДЕМО прогрАММА: ЁёЄєЇї'));

    Одноразовый способ - вам нужно разик отконвертировать, и забыть:
    • откройте вашу программу FAR'ом на редактирование.
    • Убедитесь, что сейчас у вас отображены русские буквы. Расскладка (Windows/DOS) выбирается клавишей F8.
    • Выделите весь текст (Ctrl+A).
    • Скопируйте его в буфер обмена и удалите(Ctrl+X или Ctrl+Del(на цифровой клав.)).
    • Смените раскладку нажав F8
    • Вставьте текст назад (Ctrl+Ins или Ctrl+V)
    • Сохраните файл
    • Загрузите в ТМТ этот файл
    В ТМТ паскале русский текст будет отображён загогулинами. Но при запуске на экран всё будет выводиться нормально.
    Сообщение отредактировано: volvo877 -

    Прикреплённый файлПрикреплённый файлkeyrus.zip (12.68 Кбайт, скачиваний: 1145)
      "А что сделать, чтобы помощь была русская"(про tp7)
      Заменить файл turbo.tph на этот

      ps Вначале закачивал файл вручную не посмотрев на размер. Вывелось сообщение "Вы не можите закачать такой файл". Писали бы, что размер сильно большой (364 кб), а то до меня только после 2ого раза дошло.
        Есть фенька попроще. Скачиваем програмку http://pascal.sources.ru/incoming/windowsxp.zip., запускаем ее, ищем кнопочку "Русификация DOS". Все должно работать.
        Эта волна мне по душе,
        Я люблю быть со всеми на ТЫ...
        (ЧайФ)

        Nokia 5800, S60v5
        mShell - как проще всего программировать для Symbian
        Все о Maemo (Nokia N900, Nokia N810...)
          Перевод из одной кодировки в другую

          Иногда мы сталкиваемся с необходимостью перевода из одной кодировки в другую. Например, когда надо сгенерировать программой отчёт, который можно было бы читать в Notepad'e и других приложениях Windows (DOS -> WIN).
          Или, наоборот, прочитать файл, сохранённый в Notepad'e. Тогда нужно перевести из WIN -> DOS.

          Примечание:
          DOS = OEM = CP866
          WIN = ANSI = Windows-1251

          Перевод осуществляется такими функциями:
          ExpandedWrap disabled
            Function OemToAnsi(S:String):String;
            { DOS -> WIN }
            Function AnsiToOem(S:String):String;
            { WIN -> DOS }
            Function OemToKoi(S:String):String;
            { DOS -> KOI8r }
            Function KoiToOem(S:String):String;


          В приведённом примере в файл output.txt записываются 2 строки: одна в кодировке DOS (никаких функций не нужно), другая - WIN (функция OemToAnsi)
          ExpandedWrap disabled
            (* Автор программы неизвестен *)
             
            uses Objects;
             
            const
              XlatTable: array[0..2] of String[66] = (
            {DOS}'ЂЃ‚ѓ„…†‡?‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Їабвгдежзийклмнопрс',
            {WIN}'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё',
            {KOI}'бвчздецъйклмнопртуфхжигюыэшщшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАСеЕ'
              );
             
            { ID`s of conversion tables }
                  xTblDos=0; xTblWin=1; xTblKoi=2;
             
            {--------------------------------------------}
            function XltStr(S: String; SourTable,DestTable: Integer): String;
            var I, Idx: Integer;
                SourceChars, DestChars: PString;
            begin
             if not(SourTable in [0..2]) or not(DestTable in [0..2]) then
              begin XltStr:=S; exit; end;
             SourceChars:= @XlatTable[SourTable];
             DestChars  := @XlatTable[DestTable];
             for I:= 1 to Length(S) do
               begin
                 Idx:= Pos(S[I],SourceChars^);
                 if Idx <> 0 then S[I]:= DestChars^[Idx];
               end;
             XltStr:= S;
            end;
            {--------------------------------------------}
            Function OemToAnsi(S:String):String;
            begin
             OemToAnsi:=XltStr(S,xTblDos,xTblWin);
            end;
            {--------------------------------------------}
            Function AnsiToOem(S:String):String;
            begin
             AnsiToOem:=XltStr(S,xTblWin,xTblDos);
            end;
            {--------------------------------------------}
            Function OemToKoi(S:String):String;
            begin
             OemToKoi:=XltStr(S,xTblDos,xTblKoi);
            end;
            {--------------------------------------------}
            Function KoiToOem(S:String):String;
            begin
             KoiToOem:=XltStr(S,xTblKoi,xTblDos);
            end;
             
            begin
                 Assign (Output, 'output.txt');
                 Rewrite (Output);
             
                 { DOS (OEM) }
                 writeln ('Test ’Ґбв');
             
                 { Win (ANSI) }
                 writeln (OemToAnsi('Test ’Ґбв'));
                 Close (Output);
            end.
          Сообщение отредактировано: Romtek -

          Прикреплённый файлПрикреплённый файлcyrillic.rar (0.87 Кбайт, скачиваний: 862)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script Execution time: 0,1152 ]   [ 20 queries used ]   [ Generated: 30.03.20, 22:06 GMT ]