Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1435144825
shadow
2015-06-24 14:20
2017.02.26
RichEdit: Загрузка из rtf-файла только текста


1-1348444158
sss
2012-09-24 03:49
2017.02.26
Импорт ф-ции из библиотеки, где параметр указатель на структуру


1-1348498746
jacksotnik
2012-09-24 18:59
2017.02.26
Вопрос по fastreport


15-1458477503
MsGuns
2016-03-20 15:38
2017.02.26
Excel->MS SQL Server


1-1348336174
crossmark
2012-09-22 21:49
2017.02.26
странный поток





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский