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

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

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

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

Сообщение Turbid » 27.09.2006 23:31:51

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

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

Вышеописанное интересует как относительно FPC, так и Delphi. Извините за откровенное ламерство в этом вопросе - просто никогда не сталкивался.
Turbid
новенький
 
Сообщения: 11
Зарегистрирован: 23.05.2006 01:49:23

Сообщение Uniser » 11.10.2006 20:14:28

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

Сообщение debi12345 » 11.10.2006 21:29:29

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

Если не нужна совметсимость с Дельфи - можно написать вашу программу на MSEgui. Там всюду юникод - поэтому пофигу, в какой ОС и в какой локали запускаешь программу - главное, чтобы в шрифтах были нужные символы. Если использовать TTF-шрифты - получаешь, как правило, полную "прозрачность". На крайняк, шрифты можно указать в командной строке MSEgui-программы ( есть такая фича ).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение ZerstoreN » 26.12.2006 19:32:23

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

Сообщение ZerstoreN » 26.12.2006 23:37:04

если кому интересно, сделал так
Код: Выделить всё
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-й :))
ZerstoreN
новенький
 
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение Sergei I. Gorelkin » 27.12.2006 04:40:38

Во жесть...
Вообще говоря, слышал я краем уха, что FPC понимает исходники в utf-8, имеет директиву {$codepage xxx} и соответствующий ей ключ командной строки, которые позволяют задавать кодировку прямо в исходнике...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Mirror » 27.12.2006 08:00:05

http://www.freepascal.ru/article//freepascal/20051026001249/ — вот тут советуется, что можно делать исходные коды в UTF-8 и переводить их в программе.
Я провал сделать MessageBoxW таким образом и у меня всё вывело. :)
Mirror
новенький
 
Сообщения: 49
Зарегистрирован: 22.05.2005 12:02:48
Откуда: Порту

Сообщение ZerstoreN » 27.12.2006 14:52:17

Спасибо :) а я чота не нашел :)
так и с alignment'ом проблем не будет
ZerstoreN
новенький
 
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение debi12345 » 28.12.2006 19:14:31

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

Недокументированная опция FPC "-Fcut8" позволяет вести исходники в UTF8-кодировке. Применяется, например, в MSE* - если нужно хранить текстовые константы прямо в коде программы, а не вресурсах и т.п., а также выводить русский текст в MessageBox независимо от операционки и системной локали.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru