![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Я офигеваю! RichEdit.
nsvi © (2003-02-06 01:38:00)
В абсолютно одинаковых условиях в RichEdit файл 200 кб в кодировке Win загружается за 0,5 с, тот же файл, но в кодировке DOS грузится 1,5 минуты, файл 700 кб в Win за 1,5 с, в DOS - не дождался (больше 15 минут).
Это при загрузке в
RichEdit1.RE_LoadFromFile(filename,reText,false);
Пробовал через PStrList, в него-то грузится файл DOS махом, но передача в RichEdit занимает столько же времени, как и прямо в него. Какая ему разница какая кодировка? Ведь файл то текстовый, причем один и тот же?
D6,Duron-1000,256 мб
nsvi (2003-02-07 00:53:00) [21]
Тут поэкспериментировал... Кусок файла 100 кб конвертировал в разные кодировки. Время загрузки в RichEdit:
в Win - 0,5 с;
в KOI - 0,5 с;
в MAC - 1 c;
в ISO - 1 с;
в DOS - 20 с.
За большую точность не ручаюсь, на глазок.
Ну теперь-то все ясно, автомат для перекодировки не проблема.
Попутно еще вопрос, что за свойство у RichEdit - Localizy (loForm, loNo, loYes)?
Kladov (2003-02-06 19:54:00) [22]
> Какая ему разница какая кодировка?
Это надо у MS спросить. Не знаю как в XP, но в 2K пока именно так. Решить можно подменой riched32.dll на более раннюю или наоборот более позднюю, у которой нет такого заглюка (если получится). Или предварительным конвертированием из 866 в 1251. Например, так:
procedure TForm1.Button1Click(Sender: PObj);
var FS, MS: PStream;
S: PChar;
L: Integer;
begin
if OpenSaveDialog1.Execute then
begin
FS := NewReadFileStream( OpenSaveDialog1.Filename );
MS := NewMemoryStream;
Stream2Stream( MS, FS, FS.Size );
FS.Free;
S := MS.Memory;
for L := 1 to MS.Size do
begin
if S^ = #0 then S^ := " ";
Inc( S );
end;
S := MS.Memory;
MS.Position := 0;
OemToChar( S, S );
( MS, MS.Size, reText, FALSE)
> Какая ему разница какая кодировка?
Это надо у MS спросить. Не знаю как в XP, но в 2K пока именно так. Решить можно подменой riched32.dll на более раннюю или наоборот более позднюю, у которой нет такого заглюка (если получится). Или предварительным конвертированием из 866 в 1251. Например, так:
procedure TForm1.Button1Click(Sender: PObj);
var FS, MS: PStream;
S: PChar;
L: Integer;
begin
if OpenSaveDialog1.Execute then
begin
FS := NewReadFileStream( OpenSaveDialog1.Filename );
MS := NewMemoryStream;
Stream2Stream( MS, FS, FS.Size );
FS.Free;
S := MS.Memory;
for L := 1 to MS.Size do
begin
if S^ = #0 then S^ := " ";
Inc( S );
end;
S := MS.Memory;
MS.Position := 0;
OemToChar( S, S );
RichEdit1.RE_LoadFromStream( MS, MS.Size, reText, FALSE );
MS.Free;
end;
end;
Остается только придумать способ автоматически отличить текст в dos-кодировке от win-кодировки.
Gandalf (2003-02-06 13:52:00) [23]
> Так я же написал код
Пардон, проглядел...
У меня этот код работает, на ура.
WinXP,D5-7,KOlnMCK 1.64-5.
nsvi (2003-02-06 13:35:00) [24]
Так я же написал код, ну а сам файл текстовый, называется, к примеру в кодировке win "text1.txt", в кодировке dos - "text2.txt" - его не перешлешь. Код именно
RichEdit1.RE_LoadFromFile("text1.txt",reText,False);
Gandalf (2003-02-06 11:01:00) [25]
Код в студию! Например если сделать так:
RichEdit1.RE_LoadFromFile("DosOrWin.TXT",reText,False);
то два файла в любой кодировке грузятся одинаково.