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

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

Как узнать код Юникодовского символа? [D7, WinXP]


Cara ©   (2004-08-08 13:27:00) 

Доброго дня.
Есть строка в юникоде.
Надо получить код для каждого её символа.
Пример:
?*(?/2+1) - строка в программе источнике (юникод).
При вставке в мою программу получаю ?*(?/2+1).
Я так понимаю,
что каждому символу соответствует
определённый код, и я смогу получив этот код сделать так:
---------
var
w : WideString;
iw : integer;
n_s : string;
begin
iw := ord(w);
if iw = 8242 then
begin
 n_s := 'pi';
end;
---------
Примерно так.
Вопрос:
Как точно узнать код символа, выражение iw := ord(w);не работает, каждый раз выдаёт разное значение.


Бином Ньютоныч   (2004-08-10 17:22:00) [1]

IsWindowUnicode?


Cobalt   (2004-08-10 16:11:00) [2]

2 ZrenBy ©   (10.08.04 12:59) [10]
Вообще-то, тут не всё так ясно - ведь:

Remarks

This function causes a WM_GETTEXT message to be sent to the specified window or control.

И оконная функция заполняет этот буфер(? который уже потом трактуется (или преобразуется? но по каким правилам?) как PWideChar?) своим текстом. Который записывается в окно тоже как буфер:
BOOL SetWindowText(
   HWND hWnd, // handle of window or control
   LPCTSTR lpString  // address of string
  );
Remarks

The SetWindowText function causes a WM_SETTEXT message to be sent to the specified window or control. If the window is a list box control created with the WS_CAPTION style, however, SetWindowText sets the text for the control, not for the list box entries.


ZrenBy   (2004-08-10 12:59:00) [3]

GetWindowTextLength W
GetWindowText W

?


Cobalt   (2004-08-09 23:19:00) [4]

А вот это уже вопрос - что ты получаешь - Юникод или нет.
Ты буфер проверял? (то есть что на самом деле лежит в памяти)
Может, тебе в ANSI выдаёт - сталкивался, может быть, что кодировка текста зависит от раскладки - русская или не руссская. Копируешь из, например, Винампа текст с русскими буквами в Блокнот. И посмотрите - при активной русской раскладке в Винампе (при копировании) - текст, при английской - кракозябры.


Cara   (2004-08-09 22:25:00) [5]

Получаю так:
var
w : WideString;
begin
SetLength(w,SendMessage(h4,WM_GETTEXTLENGTH,0,0)+1);
SetLength(w,SendMessage(h4,WM_GETTEXT,Length(w),LPARAM(w)));
end;

И уже переменную (строку) - "w" пытаюсь разложить посимвольно, и получить коды этих символов.
В приложении откуда я забираю эту строку шрифт точно юникодовский.


Cobalt   (2004-08-09 00:16:00) [6]

Хм, странно

Вот мой пример - работает на ура - выдаёт одно и тоже значение(1069):
const MyString : WideString = '1 Это текст 2';
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Ord(MyString[3])));
end;


Возникает вопрос - а точно ты получаешь строку в юникоде? Как получаешь?


Cara   (2004-08-08 14:37:00) [7]

Т.е. к символу. Я и так делал:
var
w : WideString;
iw,ic : integer;
n_s : string;
begin
ic := 1;
iw := ord(w[ic]);
if iw = 8242 then
begin
n_s := 'pi';
end;
Результат так же никакой.


Anatoly Podgoretsky   (2004-08-08 14:26:00) [8]

Обращаться к элементу строки.


Cara   (2004-08-08 14:12:00) [9]

Я про это слышал. Как поступать с WideString ?


Anatoly Podgoretsky   (2004-08-08 13:59:00) [10]

ord можно применять только к перечислимым типам, WideString относится к структурным.


Cara   (2004-08-08 13:31:00) [11]

Опять, там короче так:
pi*(i/2+1), только в юникоде.


Cara   (2004-08-08 13:29:00) [12]

Ну вот, началось.  В вопросе стояло так -
Пример:
--
?*( ?/2+1) - строка в программе источнике (юникод).
При вставке в мою программу получаю ?*(?/2+1).
--
При переносе из формы заполнения (при создании вопроса), произошло то же самое что и у меня в проге.


Наверх

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