Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как перенести текст из RichEdit с сохранением форматирования [D7, WinXP]


Kirflaer ©   (2007-03-02 11:42:00) 

Здравствуйте, у меня проблема, необходимо перенести данные из RichEdit в html, с сохранением форматирования, я вот написал
процедурку:

count:=0;
c:=0;

SetLength(Ar,RichEdit1.Lines.Count);
repeat
 begin
 Application.ProcessMessages;
 RichEdit1.SelStart:=count;
 len:=Length(RichEdit1.Lines.Strings[c]);
  s:='';
  p:='';

 for i:=0 to len do
  begin
         p:='';
         Application.ProcessMessages;
         RichEdit1.SelStart:=i+count;
         RichEdit1.SelLength:=1;
         if ((fsBold) in (RichEdit1.SelAttributes.Style)) or((fsItalic)in (RichEdit1.SelAttributes.Style))
           or((fsUnderline) in (RichEdit1.SelAttributes.Style)) then
               begin
               if ((fsBold) in (RichEdit1.SelAttributes.Style)) and        
                  ((fsItalic)in (RichEdit1.SelAttributes.Style)) and
                  ((fsUnderline) in (RichEdit1.SelAttributes.Style))
               then
                   s:=s+теги форматирования+RichEdit1.SelText
                   else
               if ((fsBold) in (RichEdit1.SelAttributes.Style)) and        
                  ((fsItalic)in (RichEdit1.SelAttributes.Style))
                  then
                  s:=s+теги форматирования+RichEdit1.SelText
               else
               if ((fsBold) in (RichEdit1.SelAttributes.Style)) and        
                   ((fsUnderline) in (RichEdit1.SelAttributes.Style))
                   then
                   s:=s+теги форматирования+RichEdit1.SelText
               else
               if ((fsItalic) in (RichEdit1.SelAttributes.Style)) and        
                  ((fsUnderline)in (RichEdit1.SelAttributes.Style))
                  then
                  s:=s+теги форматирования+RichEdit1.SelText
               else
               if ((fsBold) in (RichEdit1.SelAttributes.Style)) then    
                  s:=s+' '+RichEdit1.SelText+''
               else
               if ((fsItalic) in (RichEdit1.SelAttributes.Style)) then  
              s:=s+теги форматирования+RichEdit1.SelText
               else
               if ((fsUnderline) in (RichEdit1.SelAttributes.Style)) then  
               s:=s+теги форматирования+RichEdit1.SelText
                end
         else
           s:=s+RichEdit1.SelText;

 Ar[c]:=Ar[c]+s;
 Ar[c]:=StringReplaceAll(Ar[c],'</b><b>','');     //  Удаляем лишние теги
 Ar[c]:=StringReplaceAll(Ar[c],'</i><i>','');
 Ar[c]:=StringReplaceAll(Ar[c],'</u><u>','');

  count:=len+count+2;

  c:=c+1;
 end;
until c = RichEdit1.Lines.Count;

вот она работает, но при относительно больших обьемах текста кидает.
Я думаю обрабатывать текст по частям  в потоках, но хотелась бы спросить более продуктивный способ


reaL_Frick   (2007-03-07 11:59:00) [1]

Огромное спасибо, алгоритм очень помог.


Жуков Олег   (2007-03-02 16:51:00) [2]

Посмотри здесь http://atnode.ru/?part=104.
На днях там выложу обновление RtfToHtml (дополнения связаны только с таблицами).


DimaBr   (2007-03-02 12:48:00) [3]

Даже читать не стал

Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


Наверх

Титульная страница Поиск, карта сайта Написать письмо