Удаление строк из RichEdit VCL.
От: Аноним  
Дата: 28.08.09 08:19
Оценка:
Добрый день.

Есть BCB60 и есть приложение, в котором используется стандартный компонент VCL RichEdit. В этот RichEdit постоянно выводятся строки (т.е. он работает как-бы в режиме терминала, а не в режиме редактирования текста). При этом внутренний буфер строк (который, как известно, в RichEdit представлен классом TString) постоянно растет. Память не резиновая, поэтому этот буфер нужно периодически чистить. Сейчас это сделано так: при очередной записи в RichEdit процедура записи проверяет текущее количество строк в TString и если это количество строк больше некоторой константы (скажем 25000 строк), то нулевая строка из TString удаляется методом Delete. Все бы хорошо, но когда вызывается метод Delete визуальная часть компонента начинает отрабатывать удаление (скроллбар прыгает в начало текста строка удаляется потом скроллбар прыгает в конец текста). Эта процедура приводит к резкому замедлению печати и морганию экрана. Попытки сделать компонент RichEdit невидимым на время удаления тоже приводят к морганию. Попытки удалять не по одной строке, а по нескольку строк также приводят к морганию.

Вопросы:

1. Можно ли как-то контролировать (ограничить) кол-во строк в RichEdit не прибегая к методу Delete? Т.е. чтобы компонент сам следил за размером своего буфера и при переполнении удалял самые старые строки? Это было бы идеальным решением.

2. Если RichEdit не может сам контролировать (ограничить) кол-во строк, как организовать удаление строк так, чтобы компонент не моргал и не мотал туда-сюда скролл-баром.

3. Может есть какие-то другие компоненты для организации терминала.

Спасибо
Basil
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.