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

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

Вопрос по созданию системы отмены действий.


Cr@sh ©   (2002-08-16 11:54:00) 

Ув. мастера, педложите пожалуйста свои варианты по созданию системы отмены действий.
Суть идеи в том, что имеется программа которая частино сама, частично с помощью человека строит графики и нужно чтобы при совершении ошибки(построил не ту прямую, штриховку и т.д.) пользователь смог отменить свое действие. Программа построена на основе Image`a.
Заранее спасибо.


TTCustomDelphiMaster   (2002-08-16 17:18:00) [1]

Lord Warlock © (16.08.02 16:43)
И я про тоже см. TTCustomDelphiMaster © (16.08.02 16:12) вариант A.


Lord Warlock   (2002-08-16 16:43:00) [2]


> . Если вы на bitmap нарисуете черный квадрат какое противодействие
> нужно чтобы востановить изображение?


Нарисовать свехру квадрат цвета фона :)


TTCustomDelphiMaster   (2002-08-16 16:42:00) [3]

Lord Warlock © (16.08.02 16:17)
Такой способ подходит для редактора векторной графики, а тут мы имеем дело с TImage т.е. растровая графика. Если вы на bitmap нарисуете черный квадрат какое противодействие нужно чтобы востановить изображение? :)


Lord Warlock   (2002-08-16 16:17:00) [4]

Или делать наоборот. В программе ограниченное число граф. операций, для каждой можно написать "противодействие", операции с координатами запоминать, и по отмене вызывать противодействие.

У меня в программе была похожая вещь, но там использовалась система классов и массивы для хранения примитивов.


TTCustomDelphiMaster   (2002-08-16 16:12:00) [5]

Могу предложить два варианта реализации такой системы:
A. Нужно запоминать N предыдущих состояний картинки, что дает возможность отменить N операций. Недостаток такого способа - нужен большой объем памяти для хранения предыдущих состояний. Выход - запоминать не всю картинку, а только ту часть где были изменения.
B. Все действия пользователя заносить в список, по которому можно перейти к любому состоянию картинки путем последовательного выполнения этих действий. Допустим пользователь нарисовал 5 линий. Все эти действия занесли в список. При отмене последнего действия нужно нарисовать на исходной картинке 4 линии используя информацию занесенную в список. Недостаток этого способа - высокие затраты времени на повторение последовательности операций пользователя. Выход - выбрать оптимальное количество отмен, при этом исходное состояние картинки будет изменяться.


Наверх

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