Форум: "Начинающим";
Текущий архив: 2017.02.26;
Скачать: [xml.tar.bz2];
ВнизRichEdit: Загрузка из rtf-файла только текста Найти похожие ветки
← →
shadow (2015-06-24 14:20) [0]Добрый день.
Никак не могу разобраться(
Хочу из rtf-файла взять толь ко данные, без тегов.
Текст берётся вместе с тегами. Причём отображается не в красивом, отформатированном виде, а в виде :
{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff1\deff0\stshfdbch0\stshfloch0\s tshfhich0\stshfbi0\deflang1049\deflangfe1049\themelang1049\themelangfe0\themelan gcs0{\fonttbl{\f0\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fbidi \fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0504020202020204}Helvetica;}
{\f5\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070409020205020404}Courier;}{\f6\fbidi \froman\fcharset0\fprq2{\*\panose 02020603040505020304}Tms Rmn;}{\f7\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202030204}Helv;}
Делаю вот так:
procedure TfMain.DefoultFormat(Sender: TObject);
begin
if OpenDialog1.Execute then //Вызываем диалог открытия
begin
RichEdit1.WordWrap:=False;
RichEdit1.PlainText:=true; // текст без тегов
RichEdit1.Enabled:=False;
RichEdit1.Lines.BeginUpdate;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); // загрузка
RichEdit1.Lines.EndUpdate;
RichEdit1.Enabled:=True;
RichEdit1.Text; // всё-равно текст с тегами
end;
end;
← →
MBo © (2015-06-24 14:44) [1]
RichEdit1.PlainText:=False;
загрузить
RichEdit1.PlainText:=true;
сохранить
← →
MBo © (2015-06-24 14:48) [2]выпало:
загрузить ещё раз (можно stream, необязательно использовать файл)
← →
shadow (2015-06-24 14:59) [3]MBo, простите, я не понял.
Можно накидать псевдокод?
← →
shadow (2015-06-24 15:00) [4]"сохранить" - куда? в файл?
← →
shadow (2015-06-24 15:01) [5]Так пробовал:
RichEdit1.PlainText:=False;
загрузить
RichEdit1.PlainText:=true;
Результат такой же.
← →
MBo © (2015-06-24 15:02) [6]Ну это псевдокод и был ;)
s: TMemoryStream;
begin
s := TMemoryStream.Create;
Richedit1.PlainText := False;
RichEdit1.Lines.LoadFromFile("e:\q.rtf");
Richedit1.PlainText := True;
RichEdit1.Lines.SaveToStream(s);
s.Position := 0;
RichEdit1.Lines.LoadFromStream(s);
← →
shadow (2015-06-24 15:31) [7]Как надо не работает.
Можно подумать, что PlainText - не работает, но:
Richedit1.PlainText := False; - очень быстрая загрузка
Richedit1.PlainText := true; - медленная
Судя по форумам должно работать. Где косяк....не пойму
← →
MBo © (2015-06-24 17:52) [8]У меня работает - загружается rtf с разными стилями и размерами шрифтов (что видно, если убрать последнюю строку), преобразуется в однородный текст (при наличии последней строки), разбивка на строки сохраняется
← →
sniknik © (2015-06-24 18:01) [9]> Где косяк....не пойму
знаю где знаю, в коде! вот!
в твоем коде если точнее, т.к. вон в коде у MBo его нет.
← →
sniknik © (2015-06-24 18:07) [10]> Так пробовал:
> RichEdit1.PlainText:=False;
> загрузить
> RichEdit1.PlainText:=true;
> Результат такой же.
результат где? само собой оно нигде не поменяется после присвоения true, нужно что-то сделать - сохранить/передать куда нибудь текст/т.д.
← →
shadow (2015-06-24 20:00) [11]Код такой же как у MBo:
var
s: TMemoryStream;
if OpenDialog1.Execute then
begin
s := TMemoryStream.Create;
RichEdit1.PlainText := False;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
RichEdit1.PlainText := True;
RichEdit1.Lines.SaveToStream(s);
s.Position := 0;
RichEdit1.Lines.LoadFromStream(s);
RichEdit1.Text; // в дебаге смотрю...с тегами
Memo2.Lines := RichEdit1.Lines; // на всякий вывожу в мемо...тоже с тегами
end;
← →
shadow (2015-06-24 20:01) [12]Содержание RichEdit:
{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff1\deff0\stshfdbch0\stshfloch0\stsh fhich0\stshfbi0\deflang1049\deflangfe1049\themelang1049\themelangfe0\themelangcs 0{\fonttbl{\f0\fbidi \froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fbidi \fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0504020202020204}Helvetica;}
Содержание Memo:
{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff1\deff0\stshfdbch0\stshfloch0\stsh fhich0\stshfbi0
\deflang1049\deflangfe1049\themelang1049\themelangfe0\themelangcs0{\fonttbl{\f0\ fbidi
\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi
\fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fbidi \fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi
\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fbidi \fswiss\fcharset0
\fprq2{\*\panose 020b0504020202020204}Helvetica;}
{\f5\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070409020205020404}Courier;}{\f6\fbidi \froman
\fcharset0\fprq2{\*\panose 02020603040505020304}Tms Rmn;}{\f7\fbidi \fswiss\fcharset0\fprq2
{\*\panose 020b0604020202030204}Helv;}
← →
shadow (2015-06-24 20:03) [13]Может у меня файл какой-нито "неправильный"? нарушена разметка или что-нито в этом духе. Хотя блокнот открывает, да и word тоже без проблем.
Сейчас попробую другой файл.
И попробую RxRichEdit
← →
shadow (2015-06-24 20:46) [14]Пробовал другой rtf-файл. Такая же байда.
Delphi5, компонент стандартный TRichEdit
← →
shadow (2015-06-24 23:33) [15]Вы знаете, заработал след код:
procedure TfMain.DefoultFormat(Sender: TObject);
var
Stream: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
RichEdit1.MaxLength := $7FFFFFF0;
RichEdit1.PlainText:=false;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
RichEdit1.PlainText:=True;
end;
end;
Причём начал работать и предыдущий. И случилось это, если я не ошибся, после того как я включил ScrollBar.
Сначала включил оба скрулбара - текст был мелким шрифтом и смазан
Включил вертикальный скрулбар - небольшой rtf-документ начал отображаться как следует. Большой (4,5 мб) отображался с тегами, но повторный запуск процедуры отрабатывал быстро и выдавал уже без тегов
Потом отключил скрулбары - маленький документ отображается с первого раза корректно. Большой - со второго
Добавил строку RichEdit1.MaxLength := $7FFFFFF0; - большой документ отображается корректно с первого раза.
ЧТО за мистика???
← →
Германн © (2015-06-25 01:38) [16]
> Вы знаете, заработал след код:
Завтра он перестанет работать, не волнуйся.
← →
shadow (2015-06-25 07:41) [17]Германн, вот это юмор! Пошутил так пошутил. Без опыта нахождения в дет. сад для детей наркоманов такой юморок не освоить
← →
shadow (2015-06-25 07:43) [18]Всё-таки отчего такое поведение у компонента? Кто-нибудь сталкивался?
Всем отозвавшимся, кстати, большое спасибо за помощь
← →
MBo © (2015-06-25 07:56) [19]По исходникам посмотри.
Я увидел, что при назначении свойства PlainText никакой работы не происходит, и оно используется только при загрузке-выгрузке в поток.
Преобразование происходит под капотом виндов при обработке сообщения EM_STREAMIN/OUT.
Если глюки, связанные с размером, действительно существуют, покопайся в этом направлении.
← →
sniknik © (2015-06-25 07:58) [20]вообще что то подобное завязанное на длину было -
http://delphimaster.net/view/2-1133101760
давно и неправда, не вспомню уже подробностей, но глюк был. сейчас не воспроизводится... у тебя какая дельфя? D5? если D7 то все ли "сервиспаки стоят", их 2 было 1 и 1.1 апдейты, у меня стоят оба, а тогда возможно нет. может в этом причина?
← →
MBo © (2015-06-25 07:59) [21]З.Ы. Что-то может ещё быть связано с тем, что используется древнейшая версия ричедитной длл-ки (в RX, возможно, чуть поновее, но тоже прошлого века).
← →
sniknik © (2015-06-25 08:05) [22]+
для гарантии, проверь свой код в новом свежесозданном проекте, без лишних модулей, не меняя никаких свойств у компонент, просто брось на форму и все.
← →
sniknik © (2015-06-25 09:38) [23]> Вы знаете, заработал след код:
все станьше и страньше ... не обратил поначалу внимания. ЭТОТ код работать не должен, по определению, т.к. нет никаких действий после присваивания
> RichEdit1.PlainText:=True;
← →
shadow (2015-06-25 11:37) [24]Уже нет времени разбираться. И так кучу времени потратил на такую ерунду.
Главное работает.
Спасибо все огромное.
← →
Германн © (2015-06-26 01:41) [25]
> MBo © (25.06.15 07:56) [19]
>
> По исходникам посмотри.
> Я увидел, что при назначении свойства PlainText никакой
> работы не происходит, и оно используется только при загрузке-
> выгрузке в поток.
Ну в общем, как бы, это давно известно. Свойство PlainText имеет смысл только при вызове методов TRichEdit.Lines SaveTo и LoadFrom. Причём SaveTo вроде бы никогда не вызывал нарекания (могу и ошибаться, давно не интересовался), а вот метод LoadFrom вызывал.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.02.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.002 c