Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Своя реализация Undo/Redo в текстовом редакторе


aka ©   (05.01.18 22:08

У меня получилось реализовать на двух стеках
 TActionType = (actInsert, actDelete);
 TActionRecord = record
   ActType: TActionType; {вставили или удалили}
   BeginPos: TPoint; {начало блока текста}
   EndPos: TPoint; {конец блока текста}
   Text: String; {сам текст}
 end;

  FUndoStack: array of TActionRecord;
  FRedoStack: array of TActionRecord;


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

Интересуют другие реализации сего дела. Появилась идея хранить первоначальную полную копию исходного документа а в стеках хранить только позиции блоков.
Но возможна ли такая реализация, это еще нужно пораскинуть мозгом.

Вы что думаете?


DayGaykin ©   (05.01.18 22:29[1]

Пусть жрет. Забей


ухты ©   (06.01.18 02:43[2]

в файле хранить


kilkennycat ©   (06.01.18 02:49[3]


> Появилась идея хранить первоначальную полную копию исходного
> документа

а потом ее полностью удалили, заменили на новую, и так 200 раз...

я за [1] и [2]

а вообще в интернете есть много умных статей по андо-редо. даж читал. после прочтения просто отказался от ентого в своем проекте :)


Eraser ©   (06.01.18 04:43[4]


> aka ©   (05.01.18 22:08) 


> то сильно жрет память

зипуй, будет жрать раз в 8 меньше памяти.


Игорь Шевченко ©   (06.01.18 10:47[5]

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


aka ©   (07.01.18 00:12[6]

А пусть пока жрет, работает же.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо