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

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

Разбор текста с "тегами" и вывод его на RichEdit [D7, XP]


Kostya2x ©   (2007-09-30 16:48:00) 

Здравствуйте!

Мне необходимо сделать такую вещь... Есть файл с текстом типа
~b~The some bold text~ normal text ~u~underline text~
~bu~bold underline text~
Надо считать его, обработать "теги" и вывести текст на RichEdit
в соответствии с ними.

Сколько я не бился, у меня почему-то получается зависание. :-)

У кого-нибудь есть примеры того, как можно сделать подобное? "Теги"
могут быть и другими, это не принципиально.


Kostya2x   (2007-09-30 21:14:00) [1]

Вот код. Сильно не бейте меня по разным частям тела за него. :)


const
 CR = ^M;
 LF = ^J;

var
 MainForm: TMainForm;

 // Обрабатываемый символ
 Look: Char;
 // Файловая переменная
 InFile: TextFile;

implementation

{$R *.dfm}

// Чтение символа из входного потока
procedure GetChar();
begin
 Read(InFile, Look)
end;

// Распознавние и пропуск перевода строки
procedure NextLine();
begin
 if (Look = CR) then begin
   GetChar();
   if (Look = LF) then
     GetChar()
 end
end;

// Выводим символ
procedure OutputSymbol();
begin
 MainForm.RichEdit.Text := MainForm.RichEdit.Text + Look;
end;

// Разбираем тэг
procedure ParseTag();
begin
 GetChar;
 Tag := Look;
 case Look of
   'b': MainForm.RichEdit.DefAttributes.Style := MainForm.RichEdit.DefAttributes.Style + [fsBold];
   else MainForm.RichEdit.DefAttributes.Style := MainForm.RichEdit.DefAttributes.Style;
 end;
 GetChar;
 repeat
   MainForm.RichEdit.Text := MainForm.RichEdit.Text + Look;
   GetChar()
 until (Look = '~');
 MainForm.RichEdit.DefAttributes.Style := MainForm.RichEdit.DefAttributes.Style - [fsBold]
end;

// Инициализация
procedure Init();
begin
 GetChar()
end;

procedure TMainForm.DoTextClick(Sender: TObject);
begin
 AssignFile(InFile, 'parse.txt');
 Reset(InFile);
 repeat
   case Look of
     '~': ParseTag();
     else OutputSymbol()
   end;
   NextLine()
 until Eof(InFile);
 Init();
 CloseFile(InFile)
end;


Dib@zol   (2007-09-30 17:17:00) [2]

Уважаемый АП! Я вообще-то это автору темы сказал.


Anatoly Podgoretsky   (2007-09-30 17:13:00) [3]

Еще чего, делать мне больше нечего.


Dib@zol   (2007-09-30 17:06:00) [4]

> [2] Anatoly Podgoretsky ©   (30.09.07 17:05)

Не нужно быть эйнштейном, чтоб это понять. Показывай как делал.


Anatoly Podgoretsky   (2007-09-30 17:05:00) [5]

> Kostya2x  (30.09.2007 16:48:00)  [0]

У тебя ошибка в программе.


Dib@zol   (2007-09-30 16:58:00) [6]

как-то теги косо расставлены...


Наверх

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