Winsows-приложение Unicode

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Ответить
Turbid
новенький
Сообщения: 11
Зарегистрирован: 23.05.2006 01:49:23

Winsows-приложение Unicode

Сообщение Turbid »

Пользователи программы с нерусскими локалями WindowsXP жалуются на "???" вместо символов в интерфейсе. В связи с этим решил сделать Unicode-версию программы.

Как сие осуществить? Подставлять после функций Api символ W? Этого достаточно? Есть ли ключ или какой-другой способ для того, чтобы копилятор сам использовал по умолчанию Unicode-версии функций?

Вышеописанное интересует как относительно FPC, так и Delphi. Извините за откровенное ламерство в этом вопросе - просто никогда не сталкивался.
Uniser
новенький
Сообщения: 46
Зарегистрирован: 13.05.2005 23:13:57
Откуда: Украина, Полтава

Сообщение Uniser »

Существует несколько реализаций Unicode, одна из них это двухбайтная UTF-16 в Винде она реализована в функциях с суффиксом W. Насколько я знаю, соответствующего ключа и нет! Если ты хочешь действительно работать с UTF-16, то тебя не остановит отсутствие ключа компиляции и ты будешь переписывать. На самом деле, даже если ты перепишишь интерфейс на WideString, нет никакой гарантии, что русские символы будут адекватно отражаться, если, конечно, ты их сам не рисуешь. Может быть достаточно озаботится изменением языка интефейса, это гораздо дешевле. Конвертация WideString <-> AnsiString производится в соответствии с локалью (в Делфи) в FPC у меня работало немного не так.
В винде можно попробовать рисовать текст самому с помошью функций-W (не пробовал)
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Uniser писал(а):Существует несколько реализаций Unicode, одна из них это двухбайтная UTF-16 в Винде она реализована в функциях с суффиксом W. Насколько я знаю, соответствующего ключа и нет!

Если не нужна совметсимость с Дельфи - можно написать вашу программу на MSEgui. Там всюду юникод - поэтому пофигу, в какой ОС и в какой локали запускаешь программу - главное, чтобы в шрифтах были нужные символы. Если использовать TTF-шрифты - получаешь, как правило, полную "прозрачность". На крайняк, шрифты можно указать в командной строке MSEgui-программы ( есть такая фича ).
ZerstoreN
новенький
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение ZerstoreN »

А как заставить компилятор преобразовывать русские буквы в программе в уникод соотв. языка? по умолчанию он просто добавляет ноль и все, т.е. получается неизвестношто.
ZerstoreN
новенький
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение ZerstoreN »

если кому интересно, сделал так

Код: Выделить всё

type _pchar = wchar;

function    pconv(s:_pchar):_pchar; inline;
var         p  : pchar absolute s;
            s0 : pchar;
            begin
           
            if sizeof(s^)=1 then exit; // not wchar
            s0 := p;
            if p^ <> ' ' then
            else
              begin
              p^ := '.';
              while p^ <> #0 do
                begin
                inc(p,2);
                if (p^>= #$C0) and (p^<=#$FF) then
                  dec(pbyte(p)^,$b0)
                else
                  if p^ = #$A8 then p^ := #$04
                else continue;
                (p+1)^ := #$04;
                end;
              end;
            result := pointer(s0) + sizeof(s^);
            end;

т.е. если надо вставить уникод из программы (при условии что код в ansi) нужно писать
pconv(' строка')
состояние преобразована строка или нет хранится в 1-м символе, а ссылка возвр. на 2-й :))
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Во жесть...
Вообще говоря, слышал я краем уха, что FPC понимает исходники в utf-8, имеет директиву {$codepage xxx} и соответствующий ей ключ командной строки, которые позволяют задавать кодировку прямо в исходнике...
Mirror
новенький
Сообщения: 49
Зарегистрирован: 22.05.2005 12:02:48
Откуда: Порту

Сообщение Mirror »

http://www.freepascal.ru/article//freepascal/20051026001249/ — вот тут советуется, что можно делать исходные коды в UTF-8 и переводить их в программе.
Я провал сделать MessageBoxW таким образом и у меня всё вывело. :)
ZerstoreN
новенький
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение ZerstoreN »

Спасибо :) а я чота не нашел :)
так и с alignment'ом проблем не будет
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Sergei I. Gorelkin писал(а):Во жесть...
Вообще говоря, слышал я краем уха, что FPC понимает исходники в utf-8, имеет директиву {$codepage xxx} и соответствующий ей ключ командной строки, которые позволяют задавать кодировку прямо в исходнике...

Недокументированная опция FPC "-Fcut8" позволяет вести исходники в UTF8-кодировке. Применяется, например, в MSE* - если нужно хранить текстовые константы прямо в коде программы, а не вресурсах и т.п., а также выводить русский текст в MessageBox независимо от операционки и системной локали.
Ответить