-
Люди подскажите плиз как можно прочитать и вывести (хотябы отрисовать в Canvas) юникодный файл с китайским текстом. Есть текст (txt), есть к нему шрифт. В word открывается все нормально, но как вывести в на форму в дельфи - не врубаюсь.
Желательно без сторонних библиотек.
Спасибо
-
Без сторонних - на "чистом" API. Со сторонними - искать TNT Controls и не мучиться
-
>> Без сторонних - на "чистом" API. Дык о б этом и речь - какой минимальны набор необходимых функций ? Желательно пример, если возможно. Необходимо прочиать строку текста с китайскими символами и вывести на форму....
-
> Dmitry (23.04.08 08:52) [2] > >> Без сторонних - на "чистом" API. > Дык о б этом и речь - какой минимальны набор необходимых > функций ?
Все те же функции, что и для неюникодового текста, только с W в конце названия.
-
Никакой разницы, что байты, что символы, что Юникод в части чтения нет. Откуда в Виндоус высокоуровневые средства чтения строк.
-
> Плохиш (23.04.2008 11:11:03) [3]
Эти функции не отличаются по части чтения, вот имена файлов и папок другое дело.
-
DrawTextW какойнить :)
-
А дай файлик.
-
Вощем вотэто нифига не пашет....
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;
-
вот так работает: 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)); MessageBoxW(HWND_DESKTOP, PWideChar(Data), 'LoadFile', MB_OK);
end;
end.
-
> Dmitry (23.04.2008 20:48:08) [8]
А чего это ты приводишь высокоуровневые файловые операции Паскаля в форуме по WinAPI
-
В дополнение к Игорь Шевченко © (23.04.08 20:53) [9]
Файл содержит натурально китайский текст, чтобы он отображался, в системе должна быть включена поддержка языков с письмом справа-налево и сложных языков.
-
-
Всем спасибо, все оказалось очень просто: 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;
-
> Dmitry (24.04.2008 13:44:13) [13]
> str:=ini.readString('HeaderForm','InfoLabel.C','');
Имеем серьезную проблему с Юникод
-
> > str:=ini.readString('HeaderForm','InfoLabel.C',''); > Имеем серьезную проблему с Юникод
Почему ? Все вроде работает... До конца пока не проверял, но все, что проверял - выводится. Даже в большинство контролов, достаточно установить:
font.name:='SimSun'; font.charset:=GB2312_CHARSET
только вот с хинтами проблему нада решить..... в хинт хрень валиться...как в нем charset и фонт поменять - непонятно.....
-
> только вот с хинтами проблему нада решить..... > в хинт хрень валиться...как в нем charset и фонт поменять > - непонятно.....
Использовать TNT Controls
-
TNT использовать ради хинтов - не очень... это весь интерфейс надо перемалывать.... нашел очень полезную библиотечку про хинты - спасибо автору. с исходниками, легко можно под себя переваять. может еще кому полезно будет: http://rouse.drkb.ru/files/fwhint.zip
-
> 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
|