Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно делать в Unicode константы и переменные?


BPK ©   (2003-07-01 00:52:00) 

Когда делаю константы типа WideString всё нормально до тех пор, пока я не начинаю использовать символы с кодом выше 127.
Если я их использую (задаю числовой код символа), то шибко умный компилятор считает их ANSI-символами (пробовал с кодом 241) и пытается применить к ним текущую кодовую страницу (т.е. кириллицу), несмотря на то, что мне нужен символ с кодом $F1, а не $441 (это Unicode-вариант русской буквы с ANSI-кодом $F1).
Но мне то нужно, чтобы какой я код указал, такой бы и ложился в EXE-файл!

Кстати, то же самое касается преобразования типов переменных в WideChar.


VMcL   (2003-07-03 18:40:00) [1]

>BPK (03.07.03 02:19)

A control string is a sequence of one or more control characters, each of which consists of the # symbol followed by an unsigned integer constant from 0 to 255 (decimal or hexadecimal) and denotes the corresponding ASCIIcharacter.


BPK   (2003-07-03 11:45:00) [2]

> остаётся только написать что-нибудь типа
> function WWideChar(A:Word):WideChar;register;assembler;
> asm
> end;
> и использовать так
>
> WideStr + WWideChar($F1)


Остаётся только упомянуть, что с константами такой вариант не пройдёт.


icWasya   (2003-07-03 09:43:00) [3]

остаётся только написать что-нибудь типа
function WWideChar(A:Word):WideChar;register;assembler;
asm
end;

и использовать так

WideStr + WWideChar($F1)


BPK   (2003-07-03 02:19:00) [4]

Попробуйте запустить у себя такую тестовую программку:

program SEU;

uses Windows;

const
{Это отображается правильно, но так записывать неудобно}
WS1:array[0..12]of WideChar=("H","a","s","t","a"," ","m","a",#$F1,
( #$F1)

Попробуйте запустить у себя такую тестовую программку:

program SEU;

uses Windows;

const
{Это отображается правильно, но так записывать неудобно}
WS1:array[0..12]of WideChar=("H","a","s","t","a"," ","m","a",#$F1,
"a","n","a",#0);

{А это - неправильно: вместо буквы из набора расширенной латиницы
возникает буква, зависящая от текущей кодовой страницы. Если
текущая страница - русская, то будет русская буква "с"}
WS2:WideString="Hasta ma"#$F1"ana";

{Ещё один неправильно отображаемый пример. Здесь буква "n с тильдой"
отображается как обычная "n"}
WS3:WideString="Hasta ma"+WideChar(#$F1)+"ana";

begin
MessageBoxW(0,WS1,"Unicode example 1",0);
MessageBoxW(0,PWideChar(WS2),"Unicode example 2",0);
MessageBoxW(0,PWideChar(WS3),"Unicode example 3",0);
end.


P.S. Как жалко, что исходные коды в *.pas-файлах записываются
не в Unicode-формате. Иначе всё решалось бы просто: можно было
бы записать Unicode-строку в исходном коде как есть, и всем
было бы хорошо. Впрочем, догадываюсь, что Борланду на это плевать.


VMcL   (2003-07-02 19:52:00) [5]

WideStr + WideChar($F1) ?


Cobalt   (2003-07-02 19:34:00) [6]

покажи, как ты задаёшь константу?


BPK   (2003-07-02 16:46:00) [7]

Уже пробовал искать. В справке таких директив нет. Более того, их нет и в списке ключей командной строки DCC32.EXE


Cobalt   (2003-07-01 09:03:00) [8]

может, есть какие директивы компилятору? Попробуй заглянуть в справку...


Наверх

Титульная страница Поиск, карта сайта Написать письмо