Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Прочитать 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 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
2-1238677951
Гарик
2009-04-02 17:12
2009.05.17
Изменить поведение MDIChild


15-1237283751
Rouse_
2009-03-17 12:55
2009.05.17
Завтрашний семинар в Москве


15-1236968185
Другг
2009-03-13 21:16
2009.05.17
Архивация и сжатие


15-1237091468
корнелий
2009-03-15 07:31
2009.05.17
Стенли Б. Липпман... Язык программирования C++. Вводный курс


15-1237239086
Юрий
2009-03-17 00:31
2009.05.17
С днем рождения ! 17 марта 2009 вторник