Форум: "WinAPI";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
ВнизПрочитать UNICODE файл с китайским текстом Найти похожие ветки
← →
Dmitry (2008-04-22 21:23) [0]Люди подскажите плиз как можно прочитать и вывести (хотябы отрисовать в Canvas) юникодный файл с китайским текстом.
Есть текст (txt), есть к нему шрифт. В word открывается все нормально, но как вывести в на форму в дельфи - не врубаюсь.
Желательно без сторонних библиотек.
Спасибо
← →
Игорь Шевченко © (2008-04-22 21:33) [1]Без сторонних - на "чистом" API.
Со сторонними - искать TNT Controls и не мучиться
← →
Dmitry (2008-04-23 08:52) [2]>> Без сторонних - на "чистом" API.
Дык о б этом и речь - какой минимальны набор необходимых функций ?
Желательно пример, если возможно.
Необходимо прочиать строку текста с китайскими символами и вывести на форму....
← →
Плохиш © (2008-04-23 11:11) [3]
> Dmitry (23.04.08 08:52) [2]
> >> Без сторонних - на "чистом" API.
> Дык о б этом и речь - какой минимальны набор необходимых
> функций ?
Все те же функции, что и для неюникодового текста, только с W в конце названия.
← →
Anatoly Podgoretsky © (2008-04-23 11:20) [4]Никакой разницы, что байты, что символы, что Юникод в части чтения нет.
Откуда в Виндоус высокоуровневые средства чтения строк.
← →
Anatoly Podgoretsky © (2008-04-23 11:52) [5]> Плохиш (23.04.2008 11:11:03) [3]
Эти функции не отличаются по части чтения, вот имена файлов и папок другое дело.
← →
Дмитрий С (2008-04-23 12:22) [6]DrawTextW какойнить :)
← →
Дмитрий С (2008-04-23 12:22) [7]А дай файлик.
← →
Dmitry (2008-04-23 20:48) [8]Вощем вотэто нифига не пашет....
procedure TForm1.SpeedButton1Click(Sender: TObject);
var ws: widestring;
f: TextFile;
begin
AssignFile(f, "E:\Projects\ChinaLocalization\LocaleCn.ini");
Reset(f);
Readln(f, ws);
Readln(f, ws);
Canvas.Font.Name := "SimSun";
Canvas.TextOut(10,10, ws);
CloseFile(f);
end;
← →
Игорь Шевченко © (2008-04-23 20:53) [9]вот так работает:
unit Main;
interface
procedure Run;
implementation
uses
Windows,
HsFileMapper;
procedure Run;
var
Data: WideString;
Mapper: THsFileMapper;
begin
Mapper := THSFileMapper.Create(ParamStr(1));
SetLength(Data, Mapper.FileSize div 2);
Move(Mapper.Map^, Data[1], Length(Data)*2);
Data := Copy(Data,2,Length(Data)); //Discard unicode sign
MessageBoxW(HWND_DESKTOP, PWideChar(Data), "LoadFile", MB_OK);
end;
end.
← →
Anatoly Podgoretsky © (2008-04-24 00:01) [10]> Dmitry (23.04.2008 20:48:08) [8]
А чего это ты приводишь высокоуровневые файловые операции Паскаля в форуме по WinAPI
← →
Игорь Шевченко © (2008-04-24 00:52) [11]В дополнение к Игорь Шевченко © (23.04.08 20:53) [9]
Файл содержит натурально китайский текст, чтобы он отображался, в системе должна быть включена поддержка языков с письмом справа-налево и сложных языков.
← →
Dmitry (2008-04-24 13:24) [12]> Дмитрий С
2 Файла в архиве.
LocaleCn.ini - то, что необходимо считать и вывести.
LocaleCn.pdf - то, как это должно выглядеть.
http://www.vectools.com/downloads/localecn.rar
Архив со шрифтом, если необходим (5мегов)
http://www.vectools.com/downloads/simsun.rar
← →
Dmitry (2008-04-24 13:44) [13]Всем спасибо, все оказалось очень просто:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var ini : TIniFile;
str : WideString;
begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+"LocaleCn.ini");
str:=ini.readString("HeaderForm","InfoLabel.C","");
ini.destroy;
canvas.font.name:="SimSun";
canvas.font.charset:=GB2312_CHARSET ;
canvas.textout(0,0,str);
end;
← →
Anatoly Podgoretsky © (2008-04-24 15:02) [14]> Dmitry (24.04.2008 13:44:13) [13]
> str:=ini.readString("HeaderForm","InfoLabel.C","");
Имеем серьезную проблему с Юникод
← →
Dmitry (2008-04-24 17:03) [15]
> > str:=ini.readString("HeaderForm","InfoLabel.C","");
> Имеем серьезную проблему с Юникод
Почему ? Все вроде работает...
До конца пока не проверял, но
все, что проверял - выводится.
Даже в большинство контролов, достаточно установить:
font.name:="SimSun";
font.charset:=GB2312_CHARSET
только вот с хинтами проблему нада решить.....
в хинт хрень валиться...как в нем charset и фонт поменять - непонятно.....
← →
Игорь Шевченко © (2008-04-24 21:28) [16]
> только вот с хинтами проблему нада решить.....
> в хинт хрень валиться...как в нем charset и фонт поменять
> - непонятно.....
Использовать TNT Controls
← →
Dmitry (2008-04-25 08:41) [17]TNT использовать ради хинтов - не очень...
это весь интерфейс надо перемалывать....
нашел очень полезную библиотечку про хинты - спасибо автору.
с исходниками, легко можно под себя переваять.
может еще кому полезно будет:
http://rouse.drkb.ru/files/fwhint.zip
← →
Поп Гапон (2008-05-06 18:54) [18]
> Dmitry (22.04.08 21:23)
>
> Люди подскажите плиз как можно прочитать и вывести (хотябы
> отрисовать в Canvas) юникодный файл с китайским текстом.
>
> Есть текст (txt), есть к нему шрифт. В word открывается
> все нормально, но как вывести в на форму в дельфи - не врубаюсь.
1. Шрифт должен поддерживать уникодные символы. Например Arial Unicode MS или региональные стандартные шрифты для разных версий Windows.
2. Использовать API функцию DrawText(DrawTextW) в которую передавать Canvas.Handle сам текст и прараметры его вывода
http://msdn.microsoft.com/en-us/library/ms533909(VS.85).aspx
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c