Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.09.2013, 19:18
tesla tesla вне форума
Прохожий
 
Регистрация: 15.07.2012
Сообщения: 14
Репутация: 10
Лампочка как удалить тэги в тексте

Доброго времени суток!

есть программа, которая отображает в ListBox текстовые файлы, текст файла подгружается в RichEdit1, в файле роставлены тэги нужно форматировать текст в зависимости какой тэг поставлен, это делает вот этот кусок кода:

Код:
procedure TForm1.Open1Click(Sender: TObject);
var i1,i2: integer;
begin
 RichEdit1.Lines.LoadFromFile(ListBox1.Items.Strings[ListBox1.ItemIndex]); 

 i2:=0;
 repeat
   i1:=RichEdit1.FindText('[c]',i2,MaxInt,[stMatchCase]);
   if i1 < 0 then Break;
   inc(i1,3);
   i2:=RichEdit1.FindText('[/c]',i1,MaxInt,[stMatchCase]);
   if i2 > 0 then
   begin
    RichEdit1.SelStart:=i1;
    RichEdit1.SelLength:=i2-i1;
    RichEdit1.SelAttributes.Style:=[fsBold];
    inc(i2,3);
   end;
 until i2 < 0;
end;

всё работает, но, в RichEdit отображается текст вместе с этими тэгами, как зделать чтобы они не выводились? но при этом текст остался отформатированным...

StringReplace не подходит, так как тэг удаляется, но форматирование "не происходит"

прошу помощи
Ответить с цитированием
  #2  
Старый 09.09.2013, 19:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в продолжении этого варианта: удаляй тэги после применения форматирования.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 09.09.2013, 19:35
tesla tesla вне форума
Прохожий
 
Регистрация: 15.07.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
в продолжении этого варианта: удаляй тэги после применения форматирования.

так вот я и не пойму как, если можно приведите пример кода
Ответить с цитированием
  #4  
Старый 09.09.2013, 20:14
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Ну дык AnsiPos + Delete или

Код:
RichEdit1.SelStart := RichEdit1.FindText('[c]',i2,MaxInt,[stMatchCase]); + 
RichEdit1.SelLength = 3;
RichEdit1.SetText(#0);
Ответить с цитированием
Этот пользователь сказал Спасибо Uniq! за это полезное сообщение:
tesla (10.09.2013)
  #5  
Старый 09.09.2013, 20:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ненене, регэкспы!
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо M.A.D.M.A.N. за это полезное сообщение:
Bargest (09.09.2013), PhoeniX (09.09.2013), tesla (14.09.2013), Uniq! (10.09.2013)
  #6  
Старый 09.09.2013, 21:22
tesla tesla вне форума
Прохожий
 
Регистрация: 15.07.2012
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Uniq!
Ну дык AnsiPos + Delete или

Код:
RichEdit1.SelStart := RichEdit1.FindText('[c]',i2,MaxInt,[stMatchCase]); + 
RichEdit1.SelLength = 3;
RichEdit1.SetText(#0);

ругается на строчку RichEdit1.SelText(#0);
[Error] Unit1.pas(109): Missing operator or semicolon

Код:
RichEdit1.SelStart := RichEdit1.FindText('[c]',i2,MaxInt,[stMatchCase]);
 RichEdit1.SelLength:=3;
 RichEdit1.SelText(#0);

M.A.D.M.A.N. извени но я тебя не понял

Uniq!, спасибо! зделал AnsiPos в цикле, всё работает


Код:
procedure TForm1.Open1Click(Sender: TObject);
var position,position2,i1,i2: integer;
begin
 RichEdit1.Lines.LoadFromFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);

 i2:=0;
 repeat
   i1:=RichEdit1.FindText('[c]',i2,MaxInt,[stMatchCase]);
   if i1 < 0 then Break;
   inc(i1,3);
   i2:=RichEdit1.FindText('[/c]',i1,MaxInt,[stMatchCase]);
   if i2 > 0 then
   begin
    RichEdit1.SelStart:=i1;
    RichEdit1.SelLength:=i2-i1;
    RichEdit1.SelAttributes.Style:=[fsBold];
    inc(i2,3);
   end;
 until i2 < 0;

  position:=AnsiPos('[c]', RichEdit1.Text);
  while position > 0 do
   begin
     RichEdit1.SelStart:=position-1;
     RichEdit1.SelLength:=3;
     RichEdit1.SelText:='';
     position:=AnsiPos('[c]', RichEdit1.Text);
   end;
end;

  position2:=AnsiPos('[/c]', RichEdit1.Text);
  while position2 > 0 do
   begin
     RichEdit1.SelStart:=position2-1;
     RichEdit1.SelLength:=4;
     RichEdit1.SelText:='';
     position2:=AnsiPos('[/c]', RichEdit1.Text);
   end;

Последний раз редактировалось M.A.D.M.A.N., 10.09.2013 в 08:15.
Ответить с цитированием
  #7  
Старый 10.09.2013, 01:59
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Ненене, регэкспы!
Поддерживаю.

M.A.D.M.A.N. имел ввиду RegExp
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025