Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.49 MB
Время: 0.005 c
10-1156692481
AlexeyT
2006-08-27 19:28
2009.05.17
Вопрос по Windows Media Player 9


11-1200515589
Vinum
2008-01-16 23:33
2009.05.17
как скопировать текст в буфер


9-1179837261
evg123
2007-05-22 16:34
2009.05.17
Загрузка ЦП 100%


15-1237178607
hinst
2009-03-16 07:43
2009.05.17
Pascal operating system


15-1236072640
Дукам
2009-03-03 12:30
2009.05.17
Менеджер ресурсов в Дельфи 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский