Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизКак узнать код Юникодовского символа? Найти похожие ветки
← →
Cara © (2004-08-08 13:27) [0]Доброго дня.
Есть строка в юникоде.
Надо получить код для каждого её символа.
Пример:
?*(?/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);не работает, каждый раз выдаёт разное значение.
← →
Cara © (2004-08-08 13:29) [1]Ну вот, началось. В вопросе стояло так -
Пример:
--?
*(?
/2+1) - строка в программе источнике (юникод).
При вставке в мою программу получаю ?*(?/2+1).
--
При переносе из формы заполнения (при создании вопроса), произошло то же самое что и у меня в проге.
← →
Cara © (2004-08-08 13:31) [2]Опять, там короче так:
pi*(i/2+1), только в юникоде.
← →
Anatoly Podgoretsky © (2004-08-08 13:59) [3]ord можно применять только к перечислимым типам, WideString относится к структурным.
← →
Cara © (2004-08-08 14:12) [4]Я про это слышал. Как поступать с WideString ?
← →
Anatoly Podgoretsky © (2004-08-08 14:26) [5]Обращаться к элементу строки.
← →
Cara © (2004-08-08 14:37) [6]Т.е. к символу. Я и так делал:
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;
Результат так же никакой.
← →
Cobalt © (2004-08-09 00:16) [7]Хм, странно
Вот мой пример - работает на ура - выдаёт одно и тоже значение(1069):const MyString : WideString = "1 Это текст 2";
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Ord(MyString[3])));
end;
Возникает вопрос - а точно ты получаешь строку в юникоде? Как получаешь?
← →
Cara © (2004-08-09 22:25) [8]Получаю так:
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 23:19) [9]А вот это уже вопрос - что ты получаешь - Юникод или нет.
Ты буфер проверял? (то есть что на самом деле лежит в памяти)
Может, тебе в ANSI выдаёт - сталкивался, может быть, что кодировка текста зависит от раскладки - русская или не руссская. Копируешь из, например, Винампа текст с русскими буквами в Блокнот. И посмотрите - при активной русской раскладке в Винампе (при копировании) - текст, при английской - кракозябры.
← →
ZrenBy © (2004-08-10 12:59) [10]GetWindowTextLengthW
GetWindowTextW
?
← →
Cobalt © (2004-08-10 16:11) [11]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.
← →
Бином Ньютоныч (2004-08-10 17:22) [12]IsWindowUnicode?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c